未知的修饰符'/'在…? 它是什么?
当我写下面,我得到这样的警告,它不匹配任何东西,但我相信, $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
不会被转义。