Maison >développement back-end >tutoriel php >Analyse de l'efficacité des expressions régulières PHP gourmandes, non gourmandes et backtracking (recommandé)
Tout d’abord, comprenons ce qui est gourmand en expressions régulières et ce qui ne l’est pas ? Ou qu'est-ce qu'un quantificateur de priorité correspondant et qu'est-ce qu'un quantificateur de priorité ignorant ?
D'accord, je ne sais pas quel est le concept, donnons un exemple.
Un étudiant a voulu filtrer le contenu entre eux. C'est ainsi qu'il a rédigé les règles et procédures habituelles.
$str = preg_replace('%<script>.+?</script>%i','',$str);//非贪婪
Il semble qu'il n'y ait rien de mal, mais en fait ce n'est pas le cas. Si
$str = '<script<script>alert(document.cookie)</script>>alert(document.cookie)</script>';
alors après la procédure ci-dessus, le résultat est
$str = '<script<script>alert(document.cookie)</script>>alert(document.cookie)</script>'; $str = preg_replace('%<script>.+?</script>%i','',$str);//非贪婪 print_r($str); //$str 输出为 <script>alert(document.cookie)</script>
Toujours incapable d'obtenir l'effet qu'il souhaitait. Ce qui précède n'est pas de la cupidité, et certains sont appelés paresse. Le signe du non-gourmand est d'ajouter ? après le métacaractère quantitatif, comme ?, *?, ?? (plus spécial, j'en parlerai dans le futur BLOG), etc. Autrement dit, cela signifie non gourmand. Si vous n'écrivez pas ?, cela signifie gourmand. Par exemple,
$str = '<script<script>alert(document.cookie)</script>>alert(document.cookie)</script>'; $str = preg_replace('%<script>.+</script>%i','',$str);//非贪婪 print_r($str); //$str 输出为