2011-01-27 66 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不是。这是你的错误信息的原因。

相关问题