2010-08-25 72 views
0

當我寫了下面,我得到這樣的警告,它不匹配任何東西,但我敢肯定,這$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 

爲什麼我得到這樣的警告消息?

感謝

+0

'$ value'的內容是什麼? – 2010-08-25 12:10:42

回答

6

我認爲$value包含斜槓/,這不是由preg_quote轉義:

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

通過你使用的功能分隔符:

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

或使用其他分隔符。

0

使用preg_quote時指定/作爲分隔符:

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

否則在$value的價值/將不會逃脫。

4

您應該將preg_quote($value)更改爲preg_quote($value, "/")以避免使用分隔符。

在你的榜樣,如果$value包含「(內容/其他)」將被轉義爲「(內容/其他)」,這在你的正則表達式會/[^\s]*\(content/other\)[^\s]*/iu,你可以看到有一個/這將情況下,你的正則表達式墜毀。如果你明確地說,「/」是分隔符,則正則表達式將/[^\s]*\(content\/other\)[^\s]*/iu

2

/不是PCRE元字符,所以雖然你使用它在你的正則表達式的分隔符,因爲它沒有知道你使用它作爲分隔符preg_quote()將無法​​逃脫它。您必須將其作爲第二個參數傳遞給其他參數,以便它也可以被轉義:

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