Regex найти два слова на странице

Я пытаюсь найти все страницы, содержащие слова "text1" и "text2". Мое регулярное выражение:

text1(.|\n)*text2 

он не работает. enter image description here

Ответы

Ответ 1

Если ваш IDE поддерживает флаг s (однострочный) (поэтому символ . может соответствовать символам новой строки), вы можете искать свои объекты с помощью:

(text1).*(text2)|\2.*\1

Пример с s флагом

Если среда IDE не поддерживает флаг s, вам нужно использовать [\s\S] вместо .:

(text1)[\s\S]*(text2)|\2[\s\S]*\1

Пример с [\s\S]

В некоторых языках вместо \1 и \2 используются $1 и $2, поэтому вам может потребоваться изменить это.

EDIT:

В качестве альтернативы, если вы хотите просто сопоставить, что файл содержит обе строки (но на самом деле ничего не выбрать), вы можете использовать опережения:

(?s)^(?=.*?text1)(?=.*?text2)

Это не касается порядка (или числа) аргументов, и для каждого дополнительного текста, который вы хотите найти, вы просто добавляете другой (?=.*?text_here). Этот подход хорош, так как вы можете даже включить регулярное выражение вместо простых строк.

Ответ 2

text0[\s\S]*text1

Попробуйте это. Это должно сделать это за вас.

То, что это делает, соответствует всем, включая многострочный., как .*? с флагом s.

\s заботится о spaces,newlines,tabs \s берет любой символ пробела.

Ответ 3

Если вы хотите, чтобы регулярное выражение соответствовало нескольким строкам, я бы попытался:

text1[\w\W]*text2

Использование . не является хорошим выбором, потому что оно обычно не совпадает с несколькими строками. Кроме того, для сопоставления одиночных символов я думаю, что использование квадратных скобок более идиоматично, чем использование ( ... | ... )

Если вы хотите, чтобы совпадение не зависело от порядка, используйте это:

(?:text1[\w\W]*text2)|(?:text2[\w\W]*text1)

Ответ 4

Добавление ответа для IntelliJ

Основываясь на ответе @OnlineCop, чтобы поменять порядок двух выражений в IntelliJ, вы должны стилизовать поиск как в принятом ответе, но так как IntelliJ не разрешает однострочную версию, вам нужно поставить оператор replace в отдельном поле. Кроме того, IntelliJ использует $ для идентификации выражений вместо \.

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

введите описание изображения здесь

Обратите внимание, что IntelliJ показывает в подсказке, что будет результатом замены.