未知修饰符'l'错误

时间:2011-01-27 19:17:31

标签: php regex

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

这是说我的正则表达式有一个未知的修饰符,但我不确定触发错误究竟发生了什么

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

2 个答案:

答案 0 :(得分:5)

你逃避错了。对于正则表达式解析器,以下是您的正则表达式:

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

select>\/is应该是正则表达式修饰符(正则表达式字符串包含在/中)。鉴于l中存在第一个无效修饰符,您会收到该错误。所以要解决这个问题,你需要在结束标记中转义斜杠。顺便说一下。你正在逃避相当多的不必要的事情,这就足够了:

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

答案 1 :(得分:3)

PHP’s PCRE functions要求模式由delimiters分隔,将模式与可选modifiers分开。但是,如果这些分隔符出现在模式中,则需要对这些分隔符进行转义。因此,您需要在模式中转义分隔符/

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

否则模式过早结束,其余部分被解释为修饰符。就像你的情况一样,其余部分(即select>/is)被解释为这样。 s e 是有效的修饰符,但 l 不是。这就是您的错误消息的原因。