|
|
|
| Всем привет.
Есть строка CODE1234CODE5678CODE, вместо цифр могут быть любые значения, которые всегда идут между последовательностью символов CODE. При этом искомые значения всегда состоят из четного количества символов.
Если использовать CODE в начале и конце регулярки, то получим только первое значение, т.е. 1234, т.к. CODE не будет учитываться при втором проходе, а надо найти все.
Пробую так: CODE(.{2})+?(?:(?!CODE).{2})+?
Находятся только по 2 первых символа искомых значений, т.к. (.{2})+? - в скобках только 2 символа, перестановка скобки дальше вызывает ошибку.
Пробовал другие варианты, но получаю либо первые 2 символа искомых значений, либо ничего.
Если писать CODE в начале и конце, то теряю значения из-за того, что данный блок входит в регулярку и не используется на четных проходах.
Как можно решить проблему одной регуляркой?
Или возможно как-нибудь заставить регулярку последний блок CODE использовать в следующем проходе? | |
|
|
|
|
|
|
|
для: dtopenya
(01.04.2012 в 21:53)
| | Вариант 1 (правильный):
Вариант 2 (альтернативный): | |
|
|
|
|
|
|
|
для: Sfinks
(01.04.2012 в 23:02)
| | Где тут условие проверки на длину из количества символов?
В регулярке, которую в конечном итоге хочу поправить, есть еще несколько внутренних блоков.
В идеале решением моей проблемы был бы вариант, когда закрывающий блок одного прохода участвовал бы в следующем проходе в качестве начального блока.
Такое реализуемо? | |
|
|
|
|
|
|
|
для: dtopenya
(01.04.2012 в 23:17)
| | > Где тут условие проверки на длину из количества символов?
Не понял сразу. Вот с условием
> вариант, когда закрывающий блок одного прохода участвовал бы в следующем проходе
> в качестве начального блока
Что вы называете закрывающим блоком? И о каких проходах речь? У РВ всегда один проход. Возможно только заглянуть вперед(назад) от текущего места текущего и единственного прохода. | |
|
|
|
|
|
|
|
для: Sfinks
(02.04.2012 в 00:38)
| | Проходы в моем понимании - это каждый шаг поиска по шаблону, когда указан ключ g.
Речь шла об этом:
1-й проход: CODE1234CODE
2-й проход: остается только 5678CODE
а хотелось, чтобы было:
1-й проход: CODE1234CODE
2-й проход: остается только CODE5678CODE
Ваш пример CODE((?:.{2})+?)(?=CODE) выдает нужные значения, видимо, работает так, как мне и надо.:)
Спасибо, попробую прикрутить к своей регулярке. | |
|
|
|