строка соответствия регулярному выражению, в которой первое слово повторяется в другом месте строки - PullRequest
0 голосов
/ 16 февраля 2020

Я ищу способ сопоставления линии, в которой есть два или более вхождения шаблона (слова). Пример:

abc cde abc dd

должно совпадать, поскольку последовательность abc присутствует дважды. Последовательности всегда разделяются пробелом. Если это помогает, достаточно проверить наличие нескольких слов в первом слове.

Ответы [ 2 ]

2 голосов
/ 16 февраля 2020

Основываясь на предложении , если это помогает, я в порядке, чтобы проверить множественное присутствие первой последовательности , я делаю вывод, что ваш основной интерес заключался в сопоставлении повторяющихся слов без такого ограничения, что слово находится в начале строки.

Этот будет соответствовать всем повторяющимся словам (это не соответствует последнему повторению):

(\b\w+\b)(?=.*\b\1\b)

Например, с учетом строки

aaa abc dd cde abc dd cde fga dd hello

она соответствует abc, dd, cde, dd (да, она соответствует первому и второму dd, поскольку оба сопровождаются другим dd).

2 голосов
/ 16 февраля 2020

Здесь это

^(\w{2,}(?=\s)).*\1.*$

Пояснение

^ означает поиск в начале строки

(\w*(?=\s)) эта часть является первой группой захвата, \w проверяет наличие символов слова любого количества, а (?=\s) - положительный прогноз, чтобы увидеть, заканчивается ли он пробелом.

Следующий .* означает, что могут быть любые символы любого количества.

В общем, \1 совпадает с тем же текстом, который последний раз соответствовал 1-й группе захвата.

.*$ в конце соответствует остальной части строки

...