Preg_match не работает, когда шаблон и тема внутри preg_quote - PHP - PullRequest
0 голосов
/ 08 июня 2019

Я пытаюсь preg_match, используя preg_quote для моего шаблона и темы. Проблема в том, что preg_match, кажется, не соответствует им.

Я удалил preg_quote, и он отлично мне подошел. Я пишу тему и сообщение preg_quote, чтобы увидеть, что это за результат, и они точно такие же, но preg_match, похоже, не соответствует им. Мне нужно иметь preg_quote для некоторых случаев.

$message = "My two great things in life are spaghetti and bolognese Order yours #online from Ammou Pizza in Limassol!

foody.com.cy/ammou-pizza";

if(preg_match('#' . preg_quote("ammou-pizza") . '#',  preg_quote($message)))
    echo 'here';

Я ожидаю, что вывод будет «здесь», но фактический вывод - это просто код выхода 0.

Ответы [ 2 ]

1 голос
/ 08 июня 2019

preg_quote здесь бесполезен, потому что в вашем регулярном выражении нет специального символа, используйте:

if ( preg_match('#ammou-pizza#', $message) )
    echo 'here';

В вашем случае использование preg_match не обязательно, вам лучше использовать [strstr][1], это гораздо эффективнее, так как вы хотите найти простую строку:

if (strstr('ammou-pizza', $message) )
    echo 'here';
1 голос
/ 08 июня 2019

Вы не должны использовать preg_quote($message) для исходного текста в теме поиска. Это ТОЛЬКО чтобы убедиться, что любой текст является допустимым выражением регулярного выражения. Если вы подтвердите результат этого, вы получите ...

My two great things in life are spaghetti and bolognese Order yours #online from Ammou Pizza in Limassol\!

foody\.com\.cy/ammou\-pizza

и, как вы можете видеть, он закодировал ammou\-pizza. Это не то, что вам нужно, последовательность \- нужна только потому, что - означает нечто отличное от регулярных выражений, отличное от простого тире.

Просто используйте ...

if(preg_match('#' . preg_quote("ammou-pizza") . '#',  $message))
...