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

Preg_match doesn't work when pattern and subject inside preg_quote - PHP

我正在尝试 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';

我希望输出为 'here' 但实际输出只是退出代码 0。

您不应使用 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))

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

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

在你的情况下,使用preg_match不是强制性的,你最好使用[strstr][1],它更有效,因为你想找到一个简单的字符串:

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