Как сопоставить несколько слов в регулярном выражении


Просто простое регулярное выражение, которое я не знаю, как писать.

Регулярное выражение должно убедиться, что строка соответствует всем 3 словам. Я вижу, как сделать так, чтобы он соответствовал любому из 3:

/advancedbrain|com_ixxocart|p\=completed/

Но мне нужно убедиться, что все 3 слова присутствуют в строке.

Вот слова

  1. продвинутый мозг
  2. com_ixxocart
  3. p=завершено
Author: UpHelix, 2011-03-24

3 answers

Используйте утверждения с оглядкой:

^(?=.*advancebrain)(?=.*com_ixxochart)(?=.*p=completed)

Будет соответствовать, если присутствуют все три термина.

Возможно, вам захочется добавить \b рабочие границы вокруг ваших поисковых запросов, чтобы убедиться, что они совпадают как полные слова, а не подстроки других слов (например, advancebraindeath), если вам нужно избежать этого:

^(?=.*\badvancebrain\b)(?=.*\bcom_ixxochart\b)(?=.*\bp=completed\b)
 16
Author: Tim Pietzcker, 2011-03-24 15:58:25
^(?=.*?p=completed)(?=.*?advancebrain)(?=.*?com_ixxocart).*$

Потратил слишком много времени на тестирование и доработку =/Ну что ж.. Все равно опубликую свой ответ

 4
Author: Richard Parnaby-King, 2011-03-24 16:18:58

Используйте lookahead:

(?=.*\badvancebrain)(?=.*\bcom_ixxocart)(?=.*\bp=completed)

Порядок не будет иметь значения. Все три обязательны.

 1
Author: Tom, 2011-03-24 16:02:13