In diesem Artikel wird hauptsächlich das Lookaround vor und nach dem regulären Ausdruck-Tutorial vorgestellt und die Implementierungstechniken und Vorsichtsmaßnahmen der Forward-Lookup- und Backward-Lookup-Funktionen anhand spezifischer Probleme analysiert Wer es braucht, kann auf
zurückgreifen. In diesem Artikel wird die Umsicht vor und nach dem Tutorial zu regulären Ausdrücken anhand von Beispielen erläutert. Geben Sie es wie folgt als Referenz an alle weiter:
Hinweis: In allen Beispielen sind die Ergebnisse der regulären Ausdrucksübereinstimmung im Quelltext [ und ], einige Beispiele werden mit Java implementiert. Wenn es sich um die Verwendung regulärer Ausdrücke in Java selbst handelt, wird dies an der entsprechenden Stelle erläutert. Alle Java-Beispiele werden unter JDK1.6.0_13 getestet.
1. Problemeinführung
Passen Sie in einer HTML-Seite den Text zwischen einem Tag-Paar an, z. B. indem Sie ihn mit den Tags der Seite abgleichen ,<[Tt][Ii][Tt][Ll][Ee]>.*? [Tt][Ii][Tt][Ll][Ee ; 🎜> Analyse: <[Tt][Ii][Tt][Ll][Ee]> bedeutet, dass die Groß-/Kleinschreibung nicht beachtet wird, aber es ist so nicht perfekt, weil wir nur den Text zwischen den Titel-Tags wollen, nicht die Tags selbst. Um dieses Problem zu lösen, müssen wir Lookaround verwenden.
2. Vorwärtssuche Die Vorwärtssuche gibt ein Muster an, das übereinstimmen muss, aber nicht im Ergebnis zurückgegeben wird. Die Vorwärtssuche ist eigentlich ein Unterausdruck, der mit ?= beginnt und auf den der zu vergleichende Text folgt.
Sehen Sie sich ein Beispiel für den Abgleich des Protokollteils einer URL-Adresse an: Text:http://blog.csdn.net/mhmyqn
Regulärer Ausdruck: .+(?=:)
Ergebnis:[http]://blog.csdn.net/mhmyqn
Analyse: Der Protokollteil in der URL-Adresse ist der Teil vor :, das Muster .+ stimmt mit jedem Text überein, der Unterausdruck (?=:) stimmt mit: überein, aber das übereinstimmende: erscheint nicht im Ergebnis. Wir verwenden ?=, um der Engine für reguläre Ausdrücke anzuzeigen, dass es zwar in Ordnung ist, solange es gefunden wird, aber nicht in das endgültige Rückgabeergebnis einbezogen wird. Wenn Sie hier keinen Vorwärtsvergleich (?=:) verwenden, sondern (:) direkt verwenden, lautet das Übereinstimmungsergebnis http:, einschließlich:, was nicht das ist, was wir wollen.
Hinweis: Die Angaben „Vorne“ und „Rückseite“ in der Vorder- und Rückseitensuche beziehen sich auf die relative Position zwischen dem Muster und dem zu durchsuchenden Text. Links ist die Vorderseite und rechts die Rückseite. Das heißt, die Vorwärtssuche lautet: xxx(?=xxx) und die Rückwärtssuche lautet (?<=xxx)xxx. Als nächstes wird die Rückwärtssuche eingeführt. 3. Rückwärtssuche
RückwärtssucheOperator ist?<=. Allerdings unterstützen nicht alle regulären Ausdrucksimplementierungen die Rückwärtssuche. JavaScript
unterstützt die Rückwärtssuche nicht.Wenn Sie beispielsweise den Preis im Text finden möchten (beginnend mit $, gefolgt von einer Zahl), enthält das Ergebnis nicht das Währungssymbol:
Text:Kategorie1:136,25 $, Kategorie2:28 $, Kategorie3:88,60 $Regulärer Ausdruck: (?<=$)d+(.d+)?
Ergebnis:Kategorie1:$【136,25】,Kategorie2:$
【28】,Kategorie3:$【88,60】
Analyse: (?<=$) Muster entspricht $,d+(.d+)? Muster entspricht ganzen Zahlen oder Dezimalzahlen. Wie aus den Ergebnissen hervorgeht, enthält das Ergebnis nicht das Währungssymbol, sondern nur den Preis. Was würde passieren, wenn wir keine Rückwärtssuche verwenden würden? Verwenden Sie das Muster $d+(.d+)?, das $ in das Ergebnis einbezieht. Die Verwendung des Musters d+(.d+)? wird auch mit den Zahlen in Kategorie1(23) übereinstimmen, was nicht das ist, was wir wollen. Hinweis: Die Länge des Vorwärtssuchmusters ist variabel und sie können Metazeichen wie ., *, + enthalten, während das Rückwärtssuchmuster nur eine feste Länge haben kann und keine , enthalten kann. *, + und andere Metazeichen. 4. Kombinieren Sie Vorwärtssuche und Rückwärtssuche
Verwenden Sie Vorwärtssuche und Rückwärtssuche zusammen, um das vorherige Problem zu lösenProblem mit Text zwischen HTML-Tags :
Text:Regulärer Ausdruck: (?<=<[Tt][Ii][Tt][Ll][Ee]>).*?(?= [Tt][Ii] [ Tt][Ll][Ee]>)
Ergebnis:
Analyse: Aus den Ergebnissen ist ersichtlich, dass das Problem perfekt gelöst ist. (?<=<[Tt][Ii][Tt][Ll][Ee]>) ist eine Rückwärtsoperation, die mit
5. Negieren Sie die Vorwärts- und Rückwärtssuche
Die zuvor erwähnte Vorwärtssuche und Rückwärtssuche werden normalerweise zum Abgleichen von Text verwendet und dienen dazu, festzustellen, ob die Position des Textes des zurückgegebenen übereinstimmenden Ergebnisses (durch Angabe, welcher Text vor und nach dem übereinstimmenden Ergebnis stehen muss). Diese Verwendung wird als Vorwärtssuche und Vorwärtssuche bezeichnet. Es gibt auch eine negative Vorwärtssuche und eine negative Rückwärtssuche, die Text finden, der nicht mit einem bestimmten Muster übereinstimmt.
Operatoren für die Suche vor und nach:
(?=) | 正向前查找 |
(?!) | 负向前查找 |
(?<=) | 正向后查找 |
(? | 负向后查找 |
Zum Beispiel gibt es einen Preis in einem Textabschnitt (beginnend mit $ , gefolgt von einer Zahl) und Menge, wir müssen den Preis und die Menge herausfinden, schauen wir uns zuerst den Preis an:
Text: Ich habe 30 $ für 10 Äpfel, 15 Orangen und 10 Birnen bezahlt . Ich habe bei dieser Bestellung 5 $ gespart.
Regulärer Ausdruck: (?<=$)d+
Ergebnis: Ich habe bezahlt „30 $“ für 10 Äpfel, 15 Orangen und 10 Birnen habe ich 【5 $] bei dieser Bestellung gespart Birnen. Ich habe bei dieser Bestellung 5 $ gespart.
Regulärer Ausdruck: b(? Ergebnis:
I Ich habe 30 $ für【10】 Äpfel, 【15】
Orangen und【10】 Birnen bezahlt. Ich habe bei dieser Bestellung 5 $ gespart.
Analyse: (? 6. Zusammenfassung Mit der Vorwärts- und Rückwärtssuche können Sie genau steuern, welche Inhalte im endgültigen Matching-Ergebnis enthalten sind. Die Vorher-Nachher-Suchoperation ermöglicht es uns, Unterausdrücke zu verwenden, um den Ort anzugeben, an dem die Textübereinstimmungsoperation stattfindet, und den Effekt zu erzielen, dass sie nur übereinstimmt, aber nicht verbraucht.
PS: Hier sind zwei weitere praktische Tools für reguläre Ausdrücke als Referenz:
Online-Testtool für reguläre JavaScript-Ausdrücke :
http://tools.jb51.net/regex/javascript
Online-Generierungstool für reguläre Ausdrücke: http://tools.jb51.net/regex/create_reg
Das obige ist der detaillierte Inhalt vonAusführliche Erklärung des Lookarounds vor und nach regulären Ausdrücken, Tutorial_regular expression. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!