【问题标题】:preg_match with php Compilation failedpreg_match 与 php 编译失败
【发布时间】:2013-06-27 14:57:47
【问题描述】:

我尝试匹配这个表达式:

* ^X-垃圾邮件标志:是

我使用这个代码:

if(preg_match('\'* ^X-Spam-Flag: YES\'', $value))

但我有这个错误:

PHP 警告:preg_match():编译失败:无需重复 偏移量 0

正则表达式和 * 和 ^ 的问题,但我可以纠正吗?

【问题讨论】:

  • 您需要分隔符。试试看:if(preg_match("/\* \^X-Spam-Flag: YES/i", $value))
  • 对我来说很好用.. phpfiddle.org/main/code/r8y-p52
  • “不起作用”是什么意思?“不起作用”不足以让我们理解问题。当你尝试它时发生了什么?你得到不正确的结果吗?您得到 no 结果了吗?如果结果不正确,是什么导致它们不正确?你期待什么?你得到任何正确的结果了吗?如果是这样,它们是什么?不要让我们猜测。

标签: php regex preg-match


【解决方案1】:

您缺少分隔符。

改为:

preg_match('#\'* ^X-Spam-Flag: YES\'#', $value)

或者您可能需要:

preg_match('#\* \^X-Spam-Flag: YES#', $value)

【讨论】:

  • 需要转义插入符号^
  • 也转义星号*
【解决方案2】:

您已接近解决方案,您必须转义 ^*,因为它们在正则表达式模式中具有特殊含义:

if(preg_match('\'\* \^X-Spam-Flag: YES\'', $value))

如果您的转义单引号看起来很奇怪,最好用/~ 代替......但是这些可以用作分隔符。

更多关于分隔符的信息在这里:http://www.php.net/manual/en/regexp.reference.delimiters.php

【讨论】:

    【解决方案3】:

    为了安全地转义正则表达式特殊字符,您可以简单地使用“preg_quote()”,它会在这些字符前面添加反斜杠。

    if(preg_match('\'* ^X-Spam-Flag: YES\'', preg_quote($value)))
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-11-15
      相关资源
      最近更新 更多