2011-01-27 7 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

答えて

5

あなたは間違ってエスケープしています。正規表現パーサについては、次はあなたの正規表現です:select>\/isに対し

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

は、正規表現修飾子(正規表現文字列が/で囲まれている)ことになっています。最初の無効な修飾子がある場合は、lがそのエラーを受け取ります。したがって、これを修正するには、終了タグのスラッシュをエスケープする必要があります。そしてbtw。あなたは非常に多くの不要なものをエスケープしている、これで十分です:

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

1は、(通常は '〜')でも良いだろうので、何のエスケープを別の区切り文字を使用していませんまったく必要です。 – NikiC

3

PHP’s PCRE functionsが必要とエラーにパターンをトリガするために何が起こっているのかわからないんだけどパターンをオプションのmodifiersから分離するdelimiters。しかし、これらの区切り文字は、パターン内で発生した場合にはエスケープする必要があります。つまり、あなたのパターン内部の区切り文字を/エスケープする必要があります。

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

は、そうでないパターンが途中で終了し、残りは修飾子として解釈されます。残りの部分(つまりselect>/is)がそのように解釈される場合のようにsおよびeは有効な修飾語ですが、lではありません。それがあなたのエラーメッセージの理由です。