Я использую оператор «ИЛИ» «|» для сопоставления слов из переменной $ name
$name = "one five six two"; if (preg_match('/(one|two)/i', $name)) {return true;}
Какой оператор следует использовать с preg_match, чтобы иметь условие «И», если эти слова находятся внутри $ name?
т.е.
if (preg_match('/(two "AND" five)/i', $name)) {return true;}
Если вы все еще хотите использовать регулярное выражение, вам понадобятся положительные результаты:
if (preg_match('/^(?=.*one)(?=.*two)/i', $name)) {return true;}
Это не рекомендуется для простых вещей (вроде overkill), и это становится грязным с более сложными вещами …
Я думаю, вам просто нужно разделить два условия и использовать &&
как следует
if(preg_match('/(two)/i', $name) && preg_match('/(five)/i', $name)) {return true;}
Подробнее here
if ( preg_match('/two/i', $name) && preg_match('/five/i', $name) ) {return true;}
Вы можете просто сделать это, не прибегая к регулярным выражениям:
if (strpos($name, 'one') !== false && strpos($name, 'two') !== false) { // do something }
Не используйте preg_match
если вы используете только одно слово. Регулярное выражение использует больше компьютерных ресурсов по сравнению с strpos
.
Не используйте preg_match()
если вы хотите только проверить, содержится ли одна строка в другой строке. strstr()
этого используйте strpos()
или strstr()
поскольку они будут быстрее. (PHP.net).
if (str_pos($name, 'two') !== false && str_pos($name, 'five') !== false) { return true; }