【问题标题】:Preg_match doesn't work when pattern and subject inside preg_quote - PHP当 preg_quote 中的模式和主题时 Preg_match 不起作用 - PHP
【发布时间】:2019-06-08 06:17:33
【问题描述】:

我正在尝试通过对我的模式和主题使用 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';

我希望输出是“这里”,但实际输出只是退出代码 0。

【问题讨论】:

  • 这对您的示例没有影响,但只是提一下,在使用 preg_quote 时指定分隔符也很重要:'#'.preg_quote("blafoo","#").'#'... 否则正则表达式将在您使用后立即中断搜索子字符串中的 #

标签: php regex preg-match preg-quote


【解决方案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))

【讨论】:

    【解决方案2】:

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

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

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

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

    【讨论】:

    • @NigelRen:你可能是对的,但我已经回答了这个具体问题。让我们决定他们真正想要什么。我同意您的回答更为笼统。
    • @NigelRen 确实回答了我的问题。
    猜你喜欢
    • 1970-01-01
    • 2013-06-19
    • 2015-05-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多