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

Il est dit mon regex a un modificateur inconnu, mais je ne sais pas ce qui se passe exactement pour déclencher l'erreurmodificateur inconnu « l » erreur

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

http://simplehtmldom.sourceforge.net/ – RobertPitt

Répondre

5

Vous vous êtes évadée fausse. Pour l'analyseur regex, ce qui suit est votre regex:

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

alors select>\/is est censé être les modificateurs de regexp (la chaîne regex est enfermé dans /). Étant donné que le l est le premier modificateur non valide, vous recevez cette erreur. Donc, pour corriger cela, vous devez échapper à la barre oblique dans la balise de fermeture. Et btw. vous échappez beaucoup de choses inutiles, cela suffit:

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

+1 en utilisant un séparateur différent (généralement '' ~) serait encore mieux, donc pas d'échappatoire est requis du tout. – NikiC

3

PHP’s PCRE functions exigent le motif à délimiter par delimiters qui sépare le motif de l'option modifiers. Mais ces délimiteurs doivent être échappés s'ils se produisent à l'intérieur du motif. Donc, vous devez échapper aux délimiteurs / dans votre modèle:

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

Sinon, le modèle est terminé prématurément et le reste est interprété comme modificateurs. Comme dans votre cas où le reste (c'est-à-dire select>/is) est interprété comme tel. s et e sont des modificateurs valides mais l ne l'est pas. C'est la raison de votre message d'erreur.

Questions connexes