Heim  >  Artikel  >  Backend-Entwicklung  >  Detaillierte Erklärung, was reguläre Ausdrücke sind und wie sie verwendet werden

Detaillierte Erklärung, was reguläre Ausdrücke sind und wie sie verwendet werden

阿神
阿神Original
2017-03-28 14:54:118860Durchsuche

1. Was ist ein regulärer Ausdruck

Ein regulärer Ausdruck beschreibt ein String-Matching-Muster, das verwendet werden kann, um: Entspricht einem bestimmten

(1) Überprüft, ob eine Zeichenfolge eine Zeichenfolge enthält, die einer bestimmten Regel entspricht, und kann die Zeichenfolge abrufen.

(2) Führt eine Zeichenfolgenmanipulation entsprechend der Ersetzungsoperation für übereinstimmende Regeln durch.

Reguläre Ausdrücke sind eigentlich sehr einfach zu erlernen, und auch einige abstraktere Konzepte sind leicht zu verstehen. Der Grund, warum viele Menschen das Gefühl haben, dass reguläre Ausdrücke komplizierter sind, liegt zum einen darin, dass die meisten Dokumente sie nicht von der Tiefe zur Tiefe erklären und nicht auf die Reihenfolge der Konzepte achten, was das Verständnis erschwert ; andererseits stellen verschiedene Engines in der Regel ihre einzigartigen Funktionen vor, aber diese einzigartigen Funktionen sind nicht das Erste, was wir verstehen müssen.

Verwandte Kurse: Boolean Education Regular Expression Video Tutorial


2 . So verwenden Sie reguläre Ausdrücke

2.1 Gewöhnliche Zeichen

Buchstaben, Zahlen, chinesische Schriftzeichen, Unterstreichungen, Abgesehen von Satzzeichen, die in den folgenden Kapiteln nicht speziell definiert werden, handelt es sich dabei ausschließlich um gewöhnliche Zeichen. Gewöhnliche Zeichen in einem Ausdruck stimmen beim Abgleich mit einer Zeichenfolge mit demselben Zeichen überein.

Beispiel 1: Ausdruck c, wenn die Zeichenfolge abcdef abgeglichen wird, ist das übereinstimmende Ergebnis: c; die übereinstimmende Position ist: beginnend bei 2 und endend bei 3. (Hinweis: Ob der Index bei 0 oder 1 beginnt, kann je nach aktueller Programmiersprache unterschiedlich sein.)

Beispiel 2: Ausdruck bcd, wenn die Zeichenfolge abcde abgeglichen wird, ist das übereinstimmende Ergebnis: bcd, die übereinstimmende Position ist: beginnend bei 1 und endend bei 4.

2.2 Einfache Escape-Zeichen

Für einige Zeichen, die schwer zu schreiben sind, verwenden Sie die Methode des Voranstellens. Tatsächlich sind wir alle mit diesen Charakteren vertraut.

Detaillierte Erklärung, was reguläre Ausdrücke sind und wie sie verwendet werden

Es gibt andere Satzzeichen, die in späteren Kapiteln eine besondere Verwendung finden. Das Hinzufügen von „vor“ stellt das Symbol selbst dar. Beispiel: ^ und $ haben spezielle Bedeutungen. Wenn Sie die Zeichen ^ und $ in einer Zeichenfolge extrahieren möchten, muss der reguläre Ausdruck als ^ und $ geschrieben werden.

Detaillierte Erklärung, was reguläre Ausdrücke sind und wie sie verwendet werden

Die Vergleichsmethode dieser Escape-Zeichen ähnelt der von gewöhnlichen Zeichen. Entspricht auch demselben Zeichen.

Beispiel: Ausdruck $d, beim Abgleichen der Zeichenfolge abc$de lautet das Abgleichsergebnis: Erfolg; der abgeglichene Inhalt ist: $d; die abgeglichene Position ist: beginnend bei 3 und endend bei 5.

2.3 Ausdrücke, die mit „mehreren Zeichen“ übereinstimmen können

Einige Darstellungsmethoden in regulären Ausdrücken können mit mehreren Zeichen übereinstimmen Jedes der Zeichen. Beispielsweise kann der Ausdruck d mit einer beliebigen Zahl übereinstimmen. Obwohl es mit jedem der Zeichen übereinstimmen kann, kann es nur eines sein, nicht mehrere. Das ist genau wie beim Pokern: Der König oder König kann jede Karte ersetzen, aber die Gewinnzahl kann eine Karte ersetzen.

Detaillierte Erklärung, was reguläre Ausdrücke sind und wie sie verwendet werden

Beispiel 1: Ausdruck dd, beim Abgleichen von abc123 ist das Übereinstimmungsergebnis: Erfolg; die übereinstimmende Position ist: beginnend bei 3, endet bei 5.

Beispiel 2: Ausdruck a.d, wenn aaa100 abgeglichen wird, ist das übereinstimmende Ergebnis: aa1; die übereinstimmende Position ist: beginnend bei 1 und endend bei 4.

2.4 Benutzerdefinierte Ausdrücke, die mit „mehreren Zeichen“ übereinstimmen können

Verwenden Sie eckige Klammern [], um eine Reihe von Zeichen einzuschließen, die mit jedem übereinstimmen können Charakter. Verwenden Sie [^], um eine Reihe von Zeichen einzuschließen. Es kann mit jedem Zeichen außer den Zeichen dazwischen übereinstimmen. Auf die gleiche Weise kann es zwar zu jedem von ihnen passen, es kann jedoch nur einer und nicht mehrere sein.

Detaillierte Erklärung, was reguläre Ausdrücke sind und wie sie verwendet werden

Beispiel 1: Wenn der Ausdruck [bcd][bcd] mit abc123 übereinstimmt, ist das übereinstimmende Ergebnis: bc; die übereinstimmende Position ist: Beginnt um 1 und endet um 3.

Beispiel 2: Wenn der Ausdruck [^abc] mit abc123 übereinstimmt, ist das Übereinstimmungsergebnis: Erfolg; die übereinstimmende Position ist: beginnend bei 3 und endend bei 4.

2.5 Spezielle Symbole, die die Anzahl der Übereinstimmungen ändern

Die im vorherigen Kapitel erwähnten Ausdrücke können nur einmal abgeglichen werden, unabhängig davon, ob es sich um Ausdrücke handelt, die nur mit einem Zeichentyp übereinstimmen können, oder um Ausdrücke, die mit mehreren Zeichen übereinstimmen können. Wenn Sie einen Ausdruck und ein spezielles Symbol verwenden, das die Anzahl der Übereinstimmungen ändert, können Sie wiederholt Übereinstimmungen erzielen, ohne den Ausdruck erneut schreiben zu müssen.

Die Verwendungsmethode lautet: Fügen Sie die „Zahlenänderung“ nach dem geänderten Ausdruck ein. Beispiel: [bcd][bcd] kann als [bcd]{2} geschrieben werden.

Detaillierte Erklärung, was reguläre Ausdrücke sind und wie sie verwendet werden

Beispiel 1: Wenn der Ausdruck d+/.?d* übereinstimmt, kostet er 12,5 $, das übereinstimmende Ergebnis ist: 12,5; die übereinstimmenden Positionen sind : Beginn um 10 Uhr und Ende um 14 Uhr.

Beispiel 2: Wenn der Ausdruck go{2, 8}gle mit Anzeigen von gooooogle übereinstimmt, ist das übereinstimmende Ergebnis: success; die übereinstimmende Position ist: beginnend bei 7, beendet bei 17 .

2.6 Einige andere Symbole repräsentieren abstrakte Bedeutungen

Einige Symbole repräsentieren abstrakte Sonderbedeutungen in Ausdrücken:

Detaillierte Erklärung, was reguläre Ausdrücke sind und wie sie verwendet werden

Weitere Texterklärungen sind noch relativ abstrakt, daher werden Beispiele gegeben, um das Verständnis für alle zu erleichtern.

Beispiel 1: Wenn der Ausdruck ^aaa mit xxx aaa xxx übereinstimmt, lautet das Übereinstimmungsergebnis: Fehler. Da ^ erforderlich ist, um mit dem Anfang der Zeichenfolge übereinzustimmen, kann ^aaa nur übereinstimmen, wenn aaa am Anfang der Zeichenfolge steht, z. B. aaa xxx xxx.

Beispiel 2: Wenn der Ausdruck aaa$ mit xxx aaa xxx übereinstimmt, lautet das Übereinstimmungsergebnis: Fehler. Da $ erforderlich ist, um mit dem Ende der Zeichenfolge übereinzustimmen, kann aaa$ nur übereinstimmen, wenn aaa am Ende der Zeichenfolge steht, z. B.: xxx xxx aaa.

Beispiel 3: Ausdruck .b Beim Abgleich von @@@abc lautet das Übereinstimmungsergebnis: @a; die abgeglichene Position ist: beginnend bei 2 und endend bei 4 .

Weitere Erklärung: b ähnelt ^ und $ und stimmt mit keinem Zeichen allein überein, erfordert jedoch, dass es sich auf beiden Seiten der Position im Übereinstimmungsergebnis befindet, darunter der w-Bereich und Die andere Seite ist der Nicht-W-Bereich.

Beispiel 4: Wenn der Ausdruck „bendb“ mit „weekend“, „endfor“ und „end“ übereinstimmt, ist das Übereinstimmungsergebnis: success; der übereinstimmende Inhalt ist: end, die übereinstimmende Position ist: beginnend bei 15 und endend bei 18.

Einige Symbole können die Beziehung zwischen Unterausdrücken innerhalb eines Ausdrucks beeinflussen:

Detaillierte Erklärung, was reguläre Ausdrücke sind und wie sie verwendet werden

Beispiel 5: Der Ausdruck Tom|Jack entspricht der Zeichenfolge I'm Tom,he ist Jack, das übereinstimmende Ergebnis ist: Tom; die übereinstimmende Position ist: beginnend bei 4 und endend bei 7. Beim nächsten Abgleich ist das übereinstimmende Ergebnis: Erfolg, der übereinstimmende Inhalt ist: Jack ; die übereinstimmende Position ist: beginnend bei 15 und endend bei 19.

Beispiel 6: Wenn der Ausdruck (gos*)+ mit „Let's go go go!“ übereinstimmt, ist das Übereinstimmungsergebnis: success; die übereinstimmende Position ist: beginnend bei 6 , endet mit 14.

Beispiel 7: Wenn der Ausdruck ¥(d+.?d) mit $10,9,¥20,5 übereinstimmt, ist das übereinstimmende Ergebnis: ¥20,5; die übereinstimmende Position ist: beginnend bei 6, beendet um 10. Der durch die alleinige Ermittlung des Klammerbereichs ermittelte Inhalt ist: 20,5.


3. Einige fortgeschrittene Verwendung regulärer Ausdrücke

3.1 Gierig und nicht gierig in der Anzahl der Übereinstimmungen

Gieriger Modus:

Bei Verwendung modifizierter Spielzeiten. Wann Unter Verwendung spezieller Symbole gibt es mehrere Darstellungsmethoden, mit denen derselbe Ausdruck zu unterschiedlichen Zeitpunkten gleichzeitig übereinstimmen kann, z. B.: „{m, n}“, „{m,}“, ?, *, +, das Spezifische Die Anzahl der Übereinstimmungen hängt von der übereinstimmenden Zeichenfolge ab. Diese Art von wiederholtem Matching-Ausdruck mit unbegrenzter Häufigkeit stimmt während des Matching-Prozesses immer so oft wie möglich überein. Für den Text dxxxdxxxd lautet das Beispiel beispielsweise wie folgt:

Detaillierte Erklärung, was reguläre Ausdrücke sind und wie sie verwendet werden

Es ist ersichtlich, dass w+ beim Abgleich immer mit so vielen Zeichen wie möglich übereinstimmt, die seinen Regeln entsprechen . Obwohl es im zweiten Beispiel nicht mit dem letzten d übereinstimmt, soll auch der gesamte Ausdruck erfolgreich übereinstimmen. Auf die gleiche Weise werden Ausdrücke mit * und „{m, n}“ so weit wie möglich abgeglichen, und Ausdrücke mit ? werden auch so weit wie möglich „abgeglichen“, je nachdem, ob sie übereinstimmen können oder nicht. Dieses Matching-Prinzip wird Greedy-Modus genannt.

Nicht-Gier-Modus:

Fügen Sie das ?-Zeichen nach dem Sonderzeichen hinzu, das die Anzahl der Übereinstimmungen ändert, sodass Ausdrücke mit einer unbestimmten Anzahl von Übereinstimmungen so wenig wie möglich übereinstimmen können und Ausdrücke, die übereinstimmen oder nicht übereinstimmen können, als „nicht übereinstimmend“ eingestuft werden können so viel wie möglich. Dieses Matching-Prinzip wird als nicht gieriger Modus oder auch als widerstrebender Modus bezeichnet. Wenn es weniger Übereinstimmungen gibt, wird der gesamte reguläre Ausdruck nicht übereinstimmen. Ähnlich wie im Greedy-Modus wird im Non-Greedy-Modus minimal mehr Übereinstimmungen erzielt, damit der gesamte reguläre Ausdruck erfolgreich übereinstimmt. Beispielsweise für den Text „dxxxdxxxd“, zum Beispiel:

Detaillierte Erklärung, was reguläre Ausdrücke sind und wie sie verwendet werden

Für weitere Fälle, zum Beispiel:

Beispiel 1: Ausdruck

( . *) entspricht der Zeichenfolge

: Erfolg; der übereinstimmende Inhalt ist:

aa

bb

;td> im Ausdruck entspricht dem letzten

Beispiel 2: Wenn der Ausdruck

(.*) mit der gleichen Zeichenfolge in Beispiel 1 übereinstimmt, erhalten Sie nur

/p>

, wenn Sie den nächsten erneut abgleichen, können Sie den zweiten

bb

erhalten.

3.2 Rückreferenz 1,2...

Wenn der Ausdruck übereinstimmt, gleicht die Ausdrucks-Engine den in Klammern enthaltenen Ausdruck ab () Notieren Sie die mit der Formel übereinstimmende Zeichenfolge. Beim Erhalten des Übereinstimmungsergebnisses kann die Zeichenfolge, die mit dem in Klammern enthaltenen Ausdruck übereinstimmt, separat ausgelöst werden. Dies wurde in den vorherigen Beispielen mehrfach demonstriert. Wenn in praktischen Anwendungen eine bestimmte Grenze für die Suche verwendet wird und der abzurufende Inhalt diese Grenze nicht enthält, müssen Klammern verwendet werden, um den gewünschten Bereich anzugeben. Beispielsweise ist das vorherige

(.*?)

Tatsächlich kann „die Zeichenfolge, die mit dem in Klammern enthaltenen Ausdruck übereinstimmt“ nicht nur nach Abschluss des Abgleichs, sondern auch während des Abgleichvorgangs verwendet werden. Der Teil nach dem Ausdruck kann auf den vorherigen „Untertreffer in Klammern, der bereits mit der Zeichenfolge übereinstimmt“ verweisen. Die Referenzmethode besteht darin, eine Zahl hinzuzufügen. 1 bezieht sich auf die übereinstimmende Zeichenfolge im ersten Klammerpaar, 2 bezieht sich auf die übereinstimmende Zeichenfolge im zweiten Klammerpaar ... und so weiter. Wenn ein Klammerpaar ein weiteres Klammerpaar enthält, werden die äußeren Klammern zuerst sortiert. Mit anderen Worten, welches Paar linker Klammern ( kommt zuerst, dann wird dieses Paar zuerst sortiert.

Beispiel 1: Der Ausdruck ('|")(.*?)(/1) passt zu 'Hallo ', „Welt“, das übereinstimmende Ergebnis ist: „Hallo“, wenn es mit „Welt“ übereinstimmt aa bbbb abcdefg ccccc 111121111 999999999, das übereinstimmende Ergebnis ist: cccccc. Beim nächsten Abgleich erhalten Sie 999999999. Dieser Ausdruck erfordert mindestens 5 Mal der Unterschied zwischen

Beispiel 3: Ausdruck .*?/1> Beim Abgleich von

ist das Abgleichergebnis erfolgreich, wenn nicht übereinstimmt fehlgeschlagen; wenn auf eine andere Paarung umgestellt wird, kann der Abgleich auch erfolgreich sein 🎜>

Im vorherigen Kapitel habe ich über mehrere spezielle Symbole gesprochen, die abstrakte Bedeutungen darstellen: ^ , $ , b Sie alle haben eines gemeinsam, nämlich: sich selbst Passen keine Zeichen an, sondern fügen hinzu eine Bedingung für „beide Enden der Zeichenfolge“ oder „die Lücke zwischen den Zeichen“. Nachdem wir dieses Konzept verstanden haben, wird in diesem Abschnitt eine weitere zusätzliche Bedingung für „beide Enden“ oder „die Lücke“ vorgestellt >

Vorwärtssuche: (?=xxxxx) , (?!xxxxx)

Format: (?=xxxxx), in der übereinstimmenden Zeichenfolge die „Lücke“ oder „beide Enden“, in der sie sich befindet. Die zusätzliche Bedingung lautet: Die rechte Seite der Lücke muss mit dem Ausdruck „ übereinstimmen“ xxxxx" . Da es nur als zusätzliche Bedingung für diese Lücke verwendet wird, hat es keinen Einfluss darauf, dass die nachfolgenden Ausdrücke tatsächlich mit den Zeichen nach dieser Lücke übereinstimmen. Dies ähnelt b , das keinem Zeichen allein entspricht. b nimmt nur die Zeichen vor und nach der Lücke und trifft eine Beurteilung. Dies hat keinen Einfluss auf die nachfolgenden Ausdrücke für eine echte Übereinstimmung.

Beispiel 1: Wenn der Ausdruck Windows(?=NT|XP) mit Windows 98, Windows NT und Windows 2000 übereinstimmt, wird er nur mit Windows in Windows NT übereinstimmen, andere Windows-Wörter werden nicht gefunden.

Beispiel 2: Wenn der Ausdruck (w)((?=111)(1))+ mit der Zeichenfolge aaa ffffff 9999999999 übereinstimmt, stimmt er mit den ersten 4 von 6 f und 9 9 First 7 überein. Dieser Ausdruck kann folgendermaßen interpretiert werden: Wenn Buchstaben und Zahlen mehr als viermal wiederholt werden, wird der Teil vor den letzten beiden Ziffern abgeglichen. Natürlich muss dieser Ausdruck nicht so geschrieben werden, sondern dient nur zu Demonstrationszwecken.

Format: (?!xxxxx) , befindet sich auf der rechten Seite der Lücke und darf nicht mit dem xxxxx-Teil des Ausdrucks übereinstimmen.

Beispiel 3: Wenn der Ausdruck ((?!bstopb).)+ mit fdjka ljfdl stop fjdsla fdj übereinstimmt, wird er vom Anfang bis zur Position vor stop abgeglichen stimmt mit der gesamten Zeichenkette überein.

Beispiel 4: Wenn der Ausdruck do(?!w) mit der Zeichenfolge done, do, dog übereinstimmt, kann er nur mit do übereinstimmen. In diesem Beispiel hat die Verwendung von (?!w) nach do den gleichen Effekt wie die Verwendung von b.

Rückwärts-Vorabsuche: (?

Die Konzepte dieser beiden Formate ähneln der Vorwärts-Vorwärtssuche Suche: Die für die umgekehrte Vorsuche erforderliche Bedingung lautet: Die „linke Seite“ der Lücke. Die beiden Formate erfordern, dass sie mit dem angegebenen Ausdruck übereinstimmen müssen und nicht in der Lage sein dürfen, die rechte Seite zu beurteilen . Dasselbe wie bei der „Vorwärts-Vorsuche“ besteht darin, dass sie eine Ergänzung zur Lücke darstellen und selbst keinem Zeichen entsprechen.


4. Weitere allgemeine Regeln

4.1 Regel 1

In Ausdrücken können Sie xXX und uXXXX verwenden, um ein Zeichen darzustellen (X steht für eine Hexadezimalzahl)

Detaillierte Erklärung, was reguläre Ausdrücke sind und wie sie verwendet werden

4.2 Regel 2

Während die Ausdrücke s, d, w, b besondere Bedeutungen darstellen, repräsentieren die entsprechenden Großbuchstaben die entgegengesetzte Bedeutung

1Detaillierte Erklärung, was reguläre Ausdrücke sind und wie sie verwendet werden

4.3 Regel 3

hat in Ausdrücken eine besondere Bedeutung und muss hinzugefügt werden, um dieser Charakterzusammenfassung zu entsprechen Zeichen

1Detaillierte Erklärung, was reguläre Ausdrücke sind und wie sie verwendet werden

4.4 Regel 4

Unterausdrücke in Klammern (), wenn Sie die passenden Ergebnisse wünschen Um sie nicht für eine spätere Verwendung aufzuzeichnen, können Sie das Format (?:xxxxx) verwenden.

Beispiel 1: Wenn der Ausdruck (?:(w)1)+ mit „a bbccdd efg“ übereinstimmt, ist das Ergebnis „bbccdd“. Übereinstimmungen innerhalb des Klammerbereichs (?:) werden nicht protokolliert, daher wird (w) mit 1 in Anführungszeichen gesetzt.

4.5 Regel 5

Einführung in häufig verwendete Ausdrucksattributeinstellungen: Groß-/Kleinschreibung ignorieren, einzeilig, mehrzeilig, global

1Detaillierte Erklärung, was reguläre Ausdrücke sind und wie sie verwendet werden

Verwandte Artikel:

Wie man reguläre Ausdrücke verwendet, um Klammern in PHP zuzuordnen

Zusammenfassung über die Verwendung allgemeiner Funktionen in PHP Reguläre Ausdrücke

Einfaches Codebeispiel für einen regulären PHP-Ausdruck, der chinesische Zeichen abgleicht

Stellungnahme:
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