Heim > Backend-Entwicklung > PHP-Tutorial > PHP-Effizienz regulärer Ausdrücke gierige, nicht gierige und Backtracking-Analyse (empfohlen)

PHP-Effizienz regulärer Ausdrücke gierige, nicht gierige und Backtracking-Analyse (empfohlen)

高洛峰
Freigeben: 2023-03-04 17:16:02
Original
1884 Leute haben es durchsucht

Lassen Sie uns zunächst verstehen, was von regulären Ausdrücken gierig ist und was nicht gierig ist. Oder was ist ein Matching-Prioritätsquantifizierer und was ist ein Ignorieren des Prioritätsquantifizierers?

Okay, ich weiß nicht, was das Konzept ist.

Ein Student wollte die Inhalte zwischen ihnen filtern. So schrieb er die regulären Regeln und Verfahren.

$str = preg_replace(&#39;%<script>.+?</script>%i&#39;,&#39;&#39;,$str);//非贪婪
Nach dem Login kopieren

Es scheint, dass nichts falsch ist, aber tatsächlich ist es nicht so. Wenn

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

, dann ist das Ergebnis nach dem obigen Verfahren

$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>
Nach dem Login kopieren

Immer noch nicht in der Lage, den gewünschten Effekt zu erzielen. Das Obige ist Nicht-Gier, und manche werden Faulheit genannt. Das Zeichen für Nicht-Gier besteht darin, ? nach dem quantitativen Metazeichen hinzuzufügen, wie z. B. +?, *?, ?? (spezieller, ich werde darüber in einem zukünftigen BLOG schreiben) usw. Das heißt, es bedeutet nicht gierig. Wenn Sie nicht schreiben?, bedeutet es gierig. Zum Beispiel:

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

            
        
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage