当preg_quote中的模式和主题时,Preg_match不起作用-PHP

时间:2019-06-08 06:17:33

标签: php regex preg-match preg-quote

我正在尝试通过对样式和主题使用preg_quote来进行preg_match。 问题是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';

我希望输出为“ here”,但实际输出仅为退出代码0。

2 个答案:

答案 0 :(得分:1)

您不应在要搜索的主题中使用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))

答案 1 :(得分:1)

preg_quote在这里没有用,因为您的正则表达式中没有特殊字符,请使用:

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

对于您来说,preg_match的使用不是强制性的,最好使用[strstr][1],因为您想找到一个简单的字符串,它的效率要高得多:

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