未知的修饰符'/'在…? 它是什么?

当我写下面,我得到这样的警告,它不匹配任何东西,但我相信, $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 

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

谢谢

我假设$value包含斜线/ ,这是不会preg_quote转义:

特殊的正​​则expression式字符是: . \ + * ? [ ^ ] $ ( ) { } = ! < > | : - . \ + * ? [ ^ ] $ ( ) { } = ! < > | : -

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

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

或使用另一个分隔符。

你应该改变你的preg_quote($value)preg_quote($value, "/")来转义分隔符。

在你的例子中,如果$value包含“(content / other)”,它将被转义为“(content / other)”,你的正则expression式中的这个将是/[^\s]*\(content/other\)[^\s]*/iu ,你可以看到有一个/这将会导致你的正则expression式崩溃。 如果你明确地说“/”是分隔符,那么正则expression式将是/[^\s]*\(content\/other\)[^\s]*/iu

/不是PCRE元字符,因此尽pipe您将它用作正则expression式中的分隔符,但preg_quote()不会将其转义,因为它不知道您将它用作分隔符。 就像其他人所说的那样,你必须把它作为第二个parameter passing给它,以便它也可以逃脱:

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

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

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

否则$value不会被转义。