Соответствие последовательности непустых разделенных строк с регулярным выражением - PullRequest
0 голосов
/ 24 января 2019

Я не специалист по регулярным выражениям, и у меня серьезные проблемы с сопоставлением с конкретным шаблоном.

Узор:

Последовательность последовательных произвольных слов, помеченных префиксом и суффиксом. Внутри слова должен быть хотя бы один символ .

Я имею в виду, предположим, что префикс "AB", а суффикс "YZ". С этим входом:

AB----YZAB====YZABYZ//AB++YZ,,,AB====YZAB---YZ

Соответствующие группы должны быть:

AB ---- YZAB ==== YZ, AB ++ YZ, AB ==== YZAB --- YZ

Группа ABYZ не должна совпадать, потому что она «пустая» (между префиксом и суффиксом нет ничего.

Я пытался с

(AB(.*?)YZ)+

Но ABYZ определяется как часть последовательности, так как «*» может не совпадать. Если я заставлю использовать непустые группы с

(AB(.+?)YZ)+

Но все еще без блокировки, он обнаруживает группы

AB ---- YZAB _____ YZABYZ // AB ++ YZ и AB ==== YZAB --- YZ

Я пробовал много других, более сложных, regExps, но безуспешно.

Любая помощь будет принята с благодарностью!

1 Ответ

0 голосов
/ 24 января 2019

Вы можете использовать

(?:AB(?:(?!AB).)+?YZ)+

См. Демоверсию regex .

Детали

  • (?:AB(?:(?!AB).)+?YZ)+ - одно или несколько повторений
    • AB - подстрока AB
    • (?:(?!AB).)+? (или (?:(?!AB|YZ).)+) - любой символ, кроме символа разрыва строки, 1 или более повторений, как можно меньше, который не запускает последовательность символов AB (так называемый * Жадный жетон 1024 * )
    • YZ - подстрока YZ.
...