2011-01-27 84 views
0
Warning: preg_match_all() [function.preg-match-all]: Unknown modifier 'l' in /var/www/test.php on line 9 

它說我的正則表達式有一個未知的修改,但我不知道究竟發生了觸發錯誤未知的修飾詞「L」錯誤

preg_match_all("/\<select id\=\'subscription_division_id\'(.+?)</select>\/is", $html, $matches); 
+0

http://simplehtmldom.sourceforge.net/ – RobertPitt 2011-01-27 19:25:46

回答

5

你正在逃避錯誤。對於正則表達式解析器,以下是你的正則表達式:

\<select id\=\'subscription_division_id\'(.+?)< 

select>\/is應該是正則表達式修飾符(正則表達式串被封閉在/)。鑑於l中存在第一個無效修飾符,您將收到該錯誤。所以要解決這個問題,你需要在結束標記中轉義斜線。順便說一句。你逃避了很多不必要的東西,這就夠了:

preg_match_all("/<select id='subscription_division_id'(.+?)<\/select>/is", $html, $matches); 
+3

+1使用不同的分隔符(通常是`〜`),甚至會更好,所以沒有逃脫根本不需要。 – NikiC 2011-01-27 19:23:51

3

PHP’s PCRE functions要求的圖案被分隔delimiters將圖案從可選modifiers中分離出來。但是,如果這些分隔符出現在模式中,則需要將其隔離。所以,你需要逃避你的圖案內的分隔符/

"/\<select id\=\'subscription_division_id\'(.+?)<\/select>/is" 
               ^

否則圖案提前結束,其餘被解釋爲修飾。就像你的情況一樣(即select>/is)被解釋爲這樣。 se是有效的修飾符,但是l不是。這是你的錯誤信息的原因。

相關問題