Регулярное выражение для сопоставления строки, содержащей два имени в любом порядке - PullRequest
135 голосов
/ 08 декабря 2010

Мне нужно логическое И в регулярном выражении.

что-то вроде

Джек И Джеймс

согласен со следующими строками

  • 'привет Джек здесь Джеймс '

  • ' привет Джеймс здесь Джек '

Ответы [ 5 ]

212 голосов
/ 08 декабря 2010

Вы можете делать проверки, используя lookarounds :

^(?=.*\bjack\b)(?=.*\bjames\b).*$

Проверьте это.

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

^(?=.*\bjack\b)(?=.*\bjames\b)(?=.*\bjason\b)(?=.*\bjules\b).*$
80 голосов
/ 08 декабря 2010

Попробуйте:

james.*jack

Если вы хотите оба одновременно, or их:

james.*jack|jack.*james
34 голосов
/ 02 июня 2016

Объяснение команды, которую я собираюсь написать : -

. означает любой символ, вместо которого может стоять цифра.

* означаетноль или более вхождений вещи, написанной как раз перед нейпоиск james, затем любое количество символов до jack.

Поскольку вы хотите либо jack.*james, либо james.*jack

Следовательно Команда :

jack.*james|james.*jack
5 голосов
/ 08 декабря 2010

Вы можете сделать:

\bjack\b.*\bjames\b|\bjames\b.*\bjack\b
2 голосов
/ 29 января 2019

Это коротко и сладко

(?=.*jack)(?=.*james)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...