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

abc cde abc dd

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

0
leosenko 16 Фев 2020 в 01:10

2 ответа

Лучший ответ

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

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

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

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

aaa abc dd cde abc dd cde fga dd hello

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

2
Enrico Maria De Angelis 15 Фев 2020 в 22:40

Вот

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

Объяснение

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

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

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

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

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

2
Henry Harutyunyan 15 Фев 2020 в 22:39