Heim > Backend-Entwicklung > PHP-Tutorial > Persönliches Verständnis regulärer Ausdrücke – Lazy Matching

Persönliches Verständnis regulärer Ausdrücke – Lazy Matching

WBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWB
Freigeben: 2016-08-08 09:33:02
Original
1116 Leute haben es durchsucht

Problembeschreibung

Link zu diesem Artikel: http://www.hcoding.com/?p=130

Wenn ich zum ersten Mal reguläre Ausdrücke lerne, habe ich zum Beispiel eine Frage: Ich muss die Zeichen zwischen dem ersten Paar „_“ in der Zeichenfolge „_abc_123_“ abgleichen Bei regulären Ausdrücken würde ich „/_w*_/“ schreiben, das passende Ergebnis ist „abc_123“ anstelle von „abc“, wie der Meister sagte ein Fragezeichen, „/_w*?_/“, dann ist das passende Ergebnis „abc“.

Wir wissen es? ' bedeutet bei alleiniger Verwendung: null oder einmal wiederholen, während bei '? ' erscheint nach dem Wiederholungsqualifizierer und hat die Funktion Lazy Matching, d. h. so wenig Zeichen wie möglich abzugleichen. Beschreibung des Lazy-Qualifikators:

  • *?: Beliebig oft wiederholen, aber so wenig wie möglich wiederholen
  • ?: Ein- oder mehrmals wiederholen, aber so wenig wie möglich wiederholen
  • ??: 0 oder 1 Mal wiederholen, aber so wenig wie möglich wiederholen
  • {n,m}?: n bis m Mal wiederholen, aber so wenig wie möglich wiederholen
  • {n,}?: n-mal oder öfter wiederholen, aber so wenig wie möglich wiederholen

Ja, „so wenig Wiederholungen wie möglich“, das ist eine grobe und einfache Erklärung für Lazy Matching.

Wie verstehen Sie also „so wenig Wiederholungen wie möglich“? Wir können es anhand des ignorierten Prioritätsquantifizierers regulärer Ausdrücke erklären.

Prioritätsquantifizierer ignorieren

Die Quantoren „*?“, „?“, „{n,m}?“ und „{n,}?“ sind alle ignorierte Prioritätsquantoren. , Es besteht aus dem Hinzufügen von ? nach * und {}. Wenn dies fehlschlägt, wird zuerst versucht, es nach dem Zurückverfolgen zu versuchen. Wenn beispielsweise „ab??“ mit „abb“ übereinstimmt, wird „a“ anstelle von „ab“ angezeigt. Wenn die Engine erfolgreich mit a übereinstimmt, weil sie die Priorität ignoriert, entscheidet sich die Engine zunächst dafür, nicht mit b übereinzustimmen, und prüft weiterhin den Ausdruck. Wenn sie feststellt, dass der Ausdruck beendet wurde, meldet die Engine direkt, dass die Übereinstimmung erfolgreich war. Konkret erläutern wir anhand des folgenden Beispiels Schritt für Schritt das Funktionsprinzip des Ignorierens von Prioritätsquantoren.

Beispiel

Im obigen Beispiel verwenden Sie „/_w*?_/“, um die Zeichen zwischen dem ersten Paar von „_“ in „_abc_123_“ abzugleichen.

Nachdem mit der Übereinstimmung mit dem ersten „_“ begonnen wurde, entscheidet „w*?“ zunächst, dass keine Übereinstimmung mit Zeichen erforderlich ist, da der Ausdruck „/_w*?“ zu diesem Zeitpunkt ignoriert wird __' in >/' (das '_' nach 'w*?') entspricht dem 'a' in der Zielzeichenfolge '_abc_123_' , Wenn die Übereinstimmung fehlschlägt, wird „w*?“ verwendet, um den nicht übereinstimmenden Zweig auszuprobieren (verwenden Sie w, um a abzugleichen, versuchen Sie, a erfolgreich abzugleichen) Sollten wir im nächsten Schritt versuchen, es zuzuordnen oder zu ignorieren? Da „w*?“ den Prioritätsquantifikator ignoriert und den vorherigen Schritt nicht mit „b“ übereinstimmt, versucht „w*?“ den nicht übereinstimmenden Zweig „ab“. von 3 Malen (Bis das „_“ nach dem Ausdruck „w*?“ mit dem zweiten „_“ der Zielzeichenfolge übereinstimmt), wird „abc“ schließlich abgeglichen.

Prozess (nachdem mit dem Abgleichen des ersten „_“ begonnen wurde):

Das zweite '

_
    ' im Ausdruck /_w*?
  • _/' und das 'a in der Zielzeichenfolge '_abc_123_' 'Match, the Übereinstimmung fehlgeschlagen, 'w*?' hat versucht, das 'a' in der Zielzeichenfolge '_abc_123_' zu finden, die Übereinstimmung war erfolgreich. Das zweite '_' in
  • expression/_w*?
  • _/' und das 'b in der Zielzeichenfolge '_abc_123_' 'Match, Die Übereinstimmung ist fehlgeschlagen. „w*?“ hat versucht, „ab“ in der Zielzeichenfolge „_abc_123_“ zu finden. Die Übereinstimmung war erfolgreich. Das zweite '_' im Ausdruck /_w*?
  • _
  • /' und das 'c in der Zielzeichenfolge '_abc_123_' 'Match, the Übereinstimmung fehlgeschlagen, 'w*?' hat versucht, 'abc' in der Zielzeichenfolge '_abc_123_' zu finden, die Übereinstimmung war erfolgreich. Das zweite '_' im Ausdruck /_w*?_
  • /' und das '_ in der Zielzeichenfolge '_abc
  • _123_' 'Match, match erfolgreich, das Spiel endet. Das Ergebnis ist abc. Das Obige sind meine Gedanken, nachdem ich den Abschnitt über das Ignorieren von Prioritätsquantoren in „Beherrschen regulärer Ausdrücke“ gelesen habe. Vielen Dank!
  • Link zu diesem Artikel: http://www.hcoding.com/?p=130

Originalartikel, bitte angeben: JC&hcoding.com

Das Obige stellt mein persönliches Verständnis von regulären Ausdrücken vor – Lazy Matching, einschließlich seiner Aspekte. Ich hoffe, es wird Freunden, die sich für PHP-Tutorials interessieren, hilfreich sein.

Verwandte Etiketten:
abc
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage