......中的未知修饰符'/'?它是什么?

时间:2010-08-25 12:08:39

标签: php regex warnings preg-match

当我写下以下内容时,我收到了这样的警告,并且它与任何内容都不匹配,但我确信,$row_search['content']包含$value ...

preg_match_all("/[^\s]*".preg_quote($value)."[^\s]*/iu", $row_search['content'], $final_matched);

WARNING:preg_match_all() [function.preg-match-all]: Unknown modifier '/' in C:\xampp\htdocs\finance\search\search.php on line 82

为什么我收到这样的警告信息?

由于

4 个答案:

答案 0 :(得分:6)

我认为$value包含一个斜杠/,它不会被preg_quote转义:

  

特殊正则表达式字符为:. \ + * ? [ ^ ] $ ( ) { } = ! < > | : -

将您使用的分隔符传递给函数:

preg_match_all("/[^\s]*".preg_quote($value, '/')."[^\s]*/iu", $row_search['content'], $final_matched);
//                                        ---^

或使用其他分隔符。

答案 1 :(得分:4)

您应该将preg_quote($value)更改为preg_quote($value, "/")以逃避分隔符。

在您的示例中,如果$value包含“(内容/其他)”,则会将其转义为“(内容/其他)”并且您的正则表达式中的此内容将为/[^\s]*\(content/other\)[^\s]*/iu,因为您可以看到a /这将使你的正则表达式崩溃。如果您明确说“/”是分隔符,则正则表达式将为/[^\s]*\(content\/other\)[^\s]*/iu

答案 2 :(得分:2)

/不是PCRE元字符,因此虽然您将它用作正则表达式中的分隔符,但preg_quote()不会逃避它,因为它不会知道

preg_match_all("/[^\s]*".preg_quote($value, '/')."[^\s]*/iu", $row_search['content'], $final_matched);

答案 3 :(得分:0)

使用preg_quote时将/指定为分隔符:

preg_match_all("~/[^\s]*~".preg_quote($value, '/')."[^\s]*/iu", $row_search['content'], $final_matched);

否则,/值中的$value将不会被转义。