Maison >développement back-end >tutoriel php >Analyse de l'efficacité des expressions régulières PHP gourmandes, non gourmandes et backtracking (recommandé)

Analyse de l'efficacité des expressions régulières PHP gourmandes, non gourmandes et backtracking (recommandé)

高洛峰
高洛峰original
2017-01-09 10:16:421864parcourir

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(&#39;%<script>.+?</script>%i&#39;,&#39;&#39;,$str);//非贪婪

Il semble qu'il n'y ait rien de mal, mais en fait ce n'est pas le cas. Si

$str = &#39;<script<script>alert(document.cookie)</script>>alert(document.cookie)</script>&#39;;

alors après la procédure ci-dessus, le résultat est

$str = &#39;<script<script>alert(document.cookie)</script>>alert(document.cookie)</script>&#39;;
$str = preg_replace(&#39;%<script>.+?</script>%i&#39;,&#39;&#39;,$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 = &#39;<script<script>alert(document.cookie)</script>>alert(document.cookie)</script>&#39;;
$str = preg_replace('%<script>.+</script>%i','',$str);//非贪婪
print_r($str);
//$str 输出为