2013-07-03 4 views
0

Je continue d'obtenir une erreur lors de l'utilisation et je ne sais pas pourquoi. Toute aide serait incroyable. Je l'ai googlé et trouvé des exemples, mais je reçois l'erreur, même avec des exemples d'autres peuples.erreur preg_match() en essayant de faire correspondre la variable

$statement = $list[$i]; 
echo $statement; 
preg_match("/$statement/i", $q) 

J'ai aussi essayé et ni le travail:

$statement = '/' . $list[$i] . '/i'; 
echo $statement; 
preg_match($statement, $q) 

L'erreur que je reçois est:

Attention: preg_match() [function.preg match]: Compilation a échoué: rien à répéter au décalage 0

Lorsque je fais écho le $statement je reçois: "/Who/i" (sans les guillemets)

+2

Eh bien, dites-nous le contenu de '$ statement', mais il y a de fortes chances que vous recherchiez' preg_quote'. – Wrikken

+0

@Wrikken J'ai modifié le post pour que vous voyiez quelle est l'instruction $. –

Répondre

3

Assurez-vous que tout ce qui est dans $statement produira réellement une expression rationnelle VALIDE, par ex.

$statement = '(a|'; // note lack of closing) 
preg_match("/$statement/", $text); 

produira en réalité l'expression rationnelle

/(a|/ 

qui est invalide, parce qu'il n'y a pas de clôture ) pour terminer le groupe de capture. Vous pouvez contourner ce fait:

$statement = preg_quote('(a|'); 
      ^^^^^^^^^^ 

qui échapperont à toute métacaractères regex si vous produisez une expression régulière valide à la fin. Essentiellement, vous souffrez probablement de l'équivalent regex d'une attaque par injection de code SQL.

+0

Merci pour votre aide! –

Questions connexes