regex: повторы

Модератор: Модераторы разделов

vipermagi
Сообщения: 83
ОС: AgiliaLinux

regex: повторы

Сообщение vipermagi »

Мучаю boost regex.

Нужно отыскивать строки, в которых есть такая подстрока
такого вида <e1><e7><00e1>
либо с отсутствущим средним тэгом <5c><005с>

Пытаюсь как-то так
(<[0-9a-f]{2}>)(<[0-9a-f]{2}>){0,1}(<[0-9a-f]{4}>)
Но находит фигню :( Ищет ещё зачем то в найденном.

Первый тэг это код cp1251, послединий - utf-8. Собственно, конечная цель заключается в замене значения последнего тэга на кирилическое соответствие первому. Если есть средний тэг, то его нужно как-то игнорировать.

Уже не один час бьюсь. Чё-то не очень мне понятны правила про работу с круглыми скобками и повторами, как-то не так они работают.
Спасибо сказали:
Аватара пользователя
serzh-z
Бывший модератор
Сообщения: 8259
Статус: Маньяк
ОС: Arch, Fedora, Ubuntu

Re: regex: повторы

Сообщение serzh-z »

В "<5c><005с>" "с" - русская, что не попадает под шаблон "[0-9a-f]".
Спасибо сказали:
vipermagi
Сообщения: 83
ОС: AgiliaLinux

Re: regex: повторы

Сообщение vipermagi »

serzh-z писал(а):
19.08.2013 01:03
В "<5c><005с>" "с" - русская, что не попадает под шаблон "[0-9a-f]".


Это конечно же не так. В оригинальном файле все буквы правильные. Я копирую в онлайн-тестеры содержимое из файла. Огромный файл создавал компьютер и опечаток таких там нет.
Моя проблема именно в непонимании, как надо составить правильный шаблон.
Спасибо сказали:
Аватара пользователя
serzh-z
Бывший модератор
Сообщения: 8259
Статус: Маньяк
ОС: Arch, Fedora, Ubuntu

Re: regex: повторы

Сообщение serzh-z »

vipermagi писал(а):
19.08.2013 08:06
Моя проблема именно в непонимании, как надо составить правильный шаблон.
Это правильный шаблон, который работает. как минимум, в PHP regexp.
Спасибо сказали:
vipermagi
Сообщения: 83
ОС: AgiliaLinux

Re: regex: повторы

Сообщение vipermagi »

Ну вот ссылка на тестилку pcre.ru: длинный урл
И в ней оно работает не так, как мне хочется.
Спасибо сказали:
Аватара пользователя
Bizdelnick
Модератор
Сообщения: 20996
Статус: nulla salus bello
ОС: Debian GNU/Linux

Re: regex: повторы

Сообщение Bizdelnick »

vipermagi писал(а):
19.08.2013 14:52
И в ней оно работает не так, как мне хочется.

А как Вам хочется? Что не так-то?
Пишите правильно:
в консоли
вку́пе (с чем-либо)
в общем
вообще
в течение (часа)
новичок
нюанс
по умолчанию
приемлемо
проблема
пробовать
трафик
Спасибо сказали:
vipermagi
Сообщения: 83
ОС: AgiliaLinux

Re: regex: повторы

Сообщение vipermagi »

Распарсивает самую первую строку и находит в ней четыре результата. Первый результат - всё вместе; второй, третий и четвёртый - каждый из трёх тэгов отдельно. Должно показывать только всё вместе. Должно было выдать 23 результата, а выдало 91.
Спасибо сказали:
Аватара пользователя
Bizdelnick
Модератор
Сообщения: 20996
Статус: nulla salus bello
ОС: Debian GNU/Linux

Re: regex: повторы

Сообщение Bizdelnick »

vipermagi писал(а):
19.08.2013 20:19
Должно показывать только всё вместе.

А зачем тогда скобок наставили? Я думал, специально.
<[0-9a-f]{2}>(?:<[0-9a-f]{2}>)?<[0-9a-f]{4}>
Пишите правильно:
в консоли
вку́пе (с чем-либо)
в общем
вообще
в течение (часа)
новичок
нюанс
по умолчанию
приемлемо
проблема
пробовать
трафик
Спасибо сказали:
vipermagi
Сообщения: 83
ОС: AgiliaLinux

Re: regex: повторы

Сообщение vipermagi »

Ну я написал выше, что не сильно понимаю работу скобок.
Спасибо сказали: