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);
答案 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 不是。这就是您的错误消息的原因。