30-minütiges Einführungs-Tutorial zu regulären Ausdrücken
Ziel davon Artikel
So verwenden Sie dieses Tutorial
Was genau sind reguläre Ausdrücke?
Erste Schritte
Testen regulärer Ausdrücke
Metazeichen
Zeichenflucht
Duplikat
Zeichenklasse
Zweigbedingung
Antonyme
Gruppierung
Rückverweise
Null- Breitenzusicherung
Negative Nullbreitenzusicherung
Kommentare
Gierige Behandlungsoptionen mit Lazy
Ausgewogene Gruppe/rekursives Matching
Fehlt noch etwas Erwähnung
Kontaktieren Sie den Autor
Zum Schluss noch etwas Werbung...
Online-Ressourcen Und die Referenzen dieses Artikels
Datensatz aktualisieren
Version: v2.31 (2009-4-11) Autor: deerchao Bitte geben Sie die Quelle für den Nachdruck an
Inhaltsverzeichnis überspringen
Sie sollen in 30 Minuten verstehen, was reguläre Ausdrücke sind, und ein grundlegendes Verständnis davon erlangen , sodass Sie es in Ihren eigenen Programmen oder Webseiten verwenden können.
Am wichtigsten ist, dass Sie mir bitte 30 Minuten geben. Wenn Sie keine Erfahrung mit regulären Ausdrücken haben, versuchen Sie es bitte nicht 30In Sekundenschnelle loslegen – Es sei denn, Sie sind Superman :)
Lassen Sie sich von den komplizierten Ausdrücken unten nicht einschüchtern, folgen Sie mir einfach Schritt für Schritt, Sie werden feststellen, dass reguläre Ausdrücke nicht funktionieren. Ich habe dich eigentlich nicht. Es ist so schwierig wie gedacht. Wenn Sie nach dem Lesen dieses Tutorials feststellen, dass Sie viel verstehen, sich aber an fast nichts erinnern können, ist das natürlich normal. Ich denke, dass Leute, die noch nie mit regulären Ausdrücken in Berührung gekommen sind, nach dem Lesen feststellen werden, dass sie viel verstehen Im Tutorial ist die Möglichkeit, sich mehr als 80 % der genannten Grammatik zu merken, gleich Null. Dies dient nur dazu, dass Sie die Grundprinzipien verstehen. Sie müssen in Zukunft mehr üben und es häufiger verwenden, um reguläre Ausdrücke kompetent zu beherrschen.
Dieser Artikel ist nicht nur ein Einführungstutorial, sondern soll auch ein Referenzhandbuch für die Syntax regulärer Ausdrücke sein, das bei der täglichen Arbeit verwendet werden kann. Was die eigene Erfahrung des Autors angeht, ist dieses Ziel gut erreicht – sehen Sie, ich kann nicht alles selbst aufschreiben, oder?
Format löschenTextformatkonventionen: Technische Begriffe Metazeichen-/Grammatikformat Regulärer Ausdruck Teil des regulären Ausdrucks (zur Analyse) Das Quellzeichen, das mit der Zeichenfolge übereinstimmt Erklärung eines regulären Ausdrucks oder eines Teils davon
Randnotizen ausblenden Es gibt hauptsächlich einige Kommentare auf der rechten Seite dieses Artikels Es wird verwendet, um Lesern ohne Programmierkenntnisse relevante Informationen bereitzustellen oder einige grundlegende Konzepte zu erklären, und kann normalerweise ignoriert werden.
Zeichen ist die grundlegendste Einheit, wenn Computersoftware Text verarbeitet, bei dem es sich um Buchstaben, Zahlen, Satzzeichen, Leerzeichen, Zeilenumbrüche, chinesische Schriftzeichen usw. handeln kann. String ist eine Folge von 0 oder mehr Zeichen. Text ist Text, Zeichenfolge. Zu sagen, dass eine bestimmte Zeichenfolge mit einem bestimmten regulären Ausdruck übereinstimmt, bedeutet normalerweise, dass ein Teil (oder mehrere Teile) der Zeichenfolge die durch den Ausdruck angegebenen Bedingungen erfüllen können.
Beim Schreiben von Programmen oder Webseiten, die Zeichenfolgen verarbeiten, besteht häufig die Notwendigkeit, Zeichenfolgen zu finden, die bestimmten komplexen Regeln entsprechen. Reguläre Ausdrücke sind Werkzeuge zur Beschreibung dieser Regeln. Mit anderen Worten: Reguläre Ausdrücke sind Codes, die Textregeln aufzeichnen.
Es ist sehr wahrscheinlich, dass Sie für die Dateisuche unter Windows/Dos den Platzhalter (Wildcard) verwendet haben, also * und ?. Wenn Sie alle Word-Dokumente in einem bestimmten Verzeichnis finden möchten, suchen Sie nach *.doc. Hier wird * als beliebige Zeichenfolge interpretiert. Ähnlich wie Platzhalter sind auch reguläre Ausdrücke Werkzeuge, die zum Textabgleich verwendet werden. Sie können Ihre Anforderungen jedoch genauer beschreiben als Platzhalter – natürlich auf Kosten der Komplexität – Sie können beispielsweise einen regulären Ausdruck schreiben, der zum Suchen von alle Zeichenfolgen beginnen mit 0, gefolgt von 2-3 Ziffern, dann einem Bindestrich „-“ und schließlich einer 7- oder 8-stelligen Zeichenfolge (wie 010-12345678 oder 0376-7654321).
Erste SchritteDer beste Weg, reguläre Ausdrücke zu lernen, besteht darin, mit Beispielen zu beginnen. Nachdem Sie die Beispiele verstanden haben, können Sie die Beispiele ändern und experimentieren. Nachfolgend finden Sie einige einfache Beispiele, die im Detail erläutert werden. Angenommen, Sie suchen nachhi in einem englischen Roman, können Sie den regulären Ausdruck hi verwenden.
Dies ist fast der einfachste reguläre Ausdruck. Er kann genau mit einer solchen Zeichenfolge übereinstimmen:besteht aus zwei Zeichen, das erste Zeichen ist h und das nächste Zeichen ist i. Normalerweise bieten Tools, die reguläre Ausdrücke verarbeiten, eine Option zum Ignorieren der Groß- und Kleinschreibung. Wenn diese Option aktiviert ist, kann sie mit hi,HI ,Hallo,hIJede dieser vier Situationen. Leider enthalten viele Wörter die beiden aufeinanderfolgenden Zeichen
hi, wie zum Beispiel him,Geschichte,hoch und so weiter. Wenn Sie mit hi suchen, wird auch das hi gefunden. Wenn wir genau nach dem Wort hi suchen möchten, sollten wir /bhi/b verwenden.
/b ist ein spezieller Code, der durch den regulären Ausdruck angegeben wird (naja, manche Leute nennen ihn Metazeichen, Metazeichen), der den Anfang oder das Ende des Wortes darstellt, also die Grenze des Wortes . Obwohl englische Wörter normalerweise durch Leerzeichen, Satzzeichen oder Zeilenumbrüche getrennt werden, stimmt /b mit keinem dieser worttrennenden Zeichen überein, sondern nur mit Ein Ort . Wenn Sie eine genauere Aussage benötigen:
/bentspricht einer Position, an der das vorhergehende Zeichen und das folgende Zeichen nicht beide sind (eines ist, eines ist nicht oder). existiert nicht)/w. Wenn Sie nach
hi gefolgt von einer Lucy in der Nähesuchen, sollten Sie /bhi/b.*/bLucy /b verwenden . Hier ist
.ein weiteres Metazeichen, das mit jedem Zeichen außer Zeilenumbrüchen übereinstimmt. * ist ebenfalls ein Metazeichen, stellt jedoch kein Zeichen oder eine Position dar, sondern eine Menge – es gibt an, dass der Inhalt vor * fortlaufend wiederverwendet werden kann Beliebig oft, sodass der gesamte Ausdruck übereinstimmt . Daher bedeutet .* zusammen eine beliebige Anzahl von Zeichen , die keine Zeilenumbrüche enthalten. Nun ist die Bedeutung von /bhi/b.*/bLucy/b offensichtlich: ist zuerst ein Wort „hi“ und dann eine beliebige Anzahl beliebiger Zeichen (but not ist ein Zeilenumbruch) und schließlich das Wort Lucy . Das Zeilenumbruchzeichen ist „/n“, der ASCII-Code besteht aus 10 (hexadezimalen 0x0A) Zeichen.
Wenn andere Metazeichen zusammen verwendet werden, können wir leistungsfähigere reguläre Ausdrücke erstellen. Zum Beispiel das folgende Beispiel:
0/d/d-/d/d/d/d/d/d/d/d entspricht einem solchen Zeichenfolge: beginnt mit 0, dann zwei Ziffern, dann ein Bindestrich „-“ und schließlich 8 Ziffern (das heißt, Chinas Telefonnummer. Natürlich nur dieses Beispiel Kann mit dem übereinstimmen Situation, in der die Vorwahl dreistellig ist).
Hier/d ist ein neues Metazeichen, das einer Ziffer entspricht (0, oder 1, oder 2, oder... ). - ist kein Metazeichen und entspricht nur sich selbst – dem Bindestrich (oder Minuszeichen oder Bindestrich oder wie auch immer Sie es nennen möchten).
Um so viele lästige Wiederholungen zu vermeiden, können wir diesen Ausdruck auch so schreiben: 0/d{2}-/d{8}. Hier folgt auf /d {2}({8}) Das bedeutet, dass der vorherige /d 2 Mal (8 Mal) wiederholt und abgeglichen werden muss.
Weitere verfügbare Testtools:
RegexBuddy
Javascript regulär Ausdrucks-Online-Testtool
Wenn es Ihnen nicht schwerfällt, reguläre Ausdrücke zu lesen und zu schreiben, sind Sie entweder ein Genie oder nicht von der Erde. Die Syntax regulärer Ausdrücke kann selbst für Leute, die sie regelmäßig verwenden, verwirrend sein. Da das Lesen und Schreiben schwierig und fehleranfällig ist, muss ein Tool zum Testen regulärer Ausdrücke gefunden werden.
Einige Details regulärer Ausdrücke unterscheiden sich in verschiedenen Umgebungen. In diesem Tutorial wird das Verhalten regulärer Ausdrücke unter Microsoft .Net Framework 2.0 vorgestellt. Daher werde ich Ihnen ein Tool unter .Net Regex Tester vorstellen. Stellen Sie zunächst sicher, dass .Net Framework 2.0 installiert ist, und laden Sie dann Regex Tester herunter. Dies ist eine grüne Software. Öffnen Sie nach dem Herunterladen das komprimierte Paket und führen Sie RegexTester.exe direkt aus.
Das Folgende ist ein Screenshot des laufenden Regex-Testers:
Jetzt kennen Sie bereits einige nützliche Metazeichen, wie zum Beispiel /b,.,*, und / d. Es gibt weitere Metazeichen in regulären Ausdrücken, z. B. /s entspricht jedem Leerzeichen , einschließlich Leerzeichen und Tabulatorzeichen (Tab ), Zeilenumbrüche, chinesische Leerzeichen in voller Breite usw. . /w entspricht Buchstaben oder Zahlen oder Unterstrichen oder chinesischen Schriftzeichen usw. .
Die spezielle Verarbeitung chinesischer/chinesischer Zeichen wird von der von .Net bereitgestellten Engine für reguläre Ausdrücke unterstützt. Einzelheiten in anderen Umgebungen finden Sie in den entsprechenden Dokumenten.
Hier sind einige weitere Beispiele:
/ba/w*/b entspricht mit dem Buchstaben a - zuerst der Wortanfang (/b), dann die Buchstaben a , dann eine beliebige Anzahl von Buchstaben oder Zahlen (/w*) und schließlich das Ende des Wortes (/b ).
Okay, jetzt reden wir darüber, was die Wörter im regulären Ausdruck bedeuten: nicht weniger als ein aufeinanderfolgendes/w. Ja, das hat wirklich wenig mit den Tausenden von Dingen mit demselben Namen zu tun, die man sich beim Englischlernen merken muss:)
/d+Matching1 oder mehrere aufeinanderfolgende Zahlen . Hier ist + ein Metazeichen ähnlich zu *, aber der Unterschied ist * Übereinstimmungen werden beliebig oft wiederholt (möglicherweise 0 Mal) , während + Übereinstimmungen ein- oder mehrmals wiederholt werden .
/b/w{6}/b entspricht Wörtern mit genau 6 Zeichen .
代码 | 说明 |
---|---|
. | 匹配除换行符以外的任意字符 |
/w | 匹配字母或数字或下划线或汉字 |
/s | 匹配任意的空白符 |
/d | 匹配数字 |
/b | 匹配单词的开始或结束 |
^ | 匹配字符串的开始 |
$ | 匹配字符串的结束 |
Reguläre Ausdrucks-Engines bieten normalerweise eine Methode zum „Testen, ob eine angegebene Zeichenfolge mit einem regulären Ausdruck übereinstimmt“, z. B. die RegExp.test()-Methode in JavaScript oder die Regex.IsMatch()-Methode in .NET. Der Abgleich bezieht sich hier darauf, ob es einen Teil der Zeichenfolge gibt, der den Ausdrucksregeln entspricht. Wenn Sie ^ und $ nicht verwenden, für /d{5,12} betrifft, kann mit dieser Methode nur sichergestellt werden, dass die Zeichenfolge 5 bis 12 aufeinanderfolgende Ziffern enthält, anstatt dass die gesamte Zeichenfolge 5 bis 12 Ziffern umfasst.
Metazeichen^ (ein Symbol auf derselben Taste wie die Zahl 6) und $ stimmen beide mit der A-Position überein , was /b etwas ähnelt. ^ entspricht dem Anfang der gesuchten Zeichenfolge und $ entspricht dem Ende. Diese beiden Codes sind sehr nützlich, wenn Sie den Eingabeinhalt überprüfen. Wenn eine Website beispielsweise verlangt, dass die von Ihnen eingegebene QQ-Nummer 5 bis 12 Ziffern lang sein muss, können Sie Folgendes verwenden: ^/d{5,12 } $.
Das{5,12} hier ähnelt dem zuvor eingeführten {2}, nur dass {2} stimmt mit überein und kann nur 2 Mal wiederholt werden , {5,12} bedeutet, dass nicht weniger als 5 Mal und nicht mehr als 12 Mal wiederholt werden darf , sonst stimmt es nicht überein.
Da^ und $ verwendet werden, muss die gesamte Eingabezeichenfolge mit /d{5,12} um übereinzustimmen, das heißt, die gesamte Eingabe muss 5 bis 12 Zahlen sein , also wenn die Eingabe QQ If Die Zahl kann mit diesem regulären Ausdruck übereinstimmen und erfüllt die Anforderungen. Ähnlich wie die Option, die Groß-/Kleinschreibung zu ignorieren, verfügen einige Tools zur Verarbeitung regulärer Ausdrücke auch über die Option, mehrere Zeilen zu verarbeiten. Wenn diese Option ausgewählt ist, wird die Bedeutung von
^ und $ zum Anfang der passenden Zeile von und Ende . Zeichen-Escapes
. oder *, es entsteht das Problem: Sie können sie nicht angeben, da sie als etwas anderes interpretiert werden. Zu diesem Zeitpunkt müssen Sie / verwenden, um die besondere Bedeutung dieser Zeichen aufzuheben. Daher sollten Sie /. und /* verwenden. Um / selbst zu finden, müssen Sie natürlich auch // verwenden. Zum Beispiel:
unibetter/.com entspricht unibetter.com, C://Windows entspricht C:/Windows. Wiederholen
*,+,{2},{5,12}Dies sind die Möglichkeiten, Duplikate abzugleichen. Im Folgenden sind alle Qualifikationsmerkmale in regulären Ausdrücken aufgeführt (angegebene Anzahl von Codes, z. B. *, {5,12} usw.): Hier sind einige Beispiele für die Verwendung von Wiederholungen: Windows/d+entspricht Windows gefolgt von einer oder mehreren Ziffern ^/w+ entspricht dem ersten Wort einer Zeile (oder dem ersten Wort der gesamten Zeichenfolge, insbesondere Welche Bedeutung hat). Übereinstimmung hängt von den Optionseinstellungen ab) Das Finden von Zahlen, Buchstaben oder Zahlen, Leerzeichen ist sehr einfach, da es bereits entsprechende Metazeichen für einen Satz gibt , aber was ist, wenn Sie eine Reihe von Zeichen ohne vordefinierte Metazeichen (wie die Vokale a, e, i, o, u) abgleichen möchten? ist sehr einfach, Sie müssen sie nur in eckigen Klammern auflisten, so dass [aeiou] jedem englischen Element entspricht. Die phonetischen Buchstaben , [.?!] entsprechen Satzzeichen (. oder ? oder !) . Wir können auch problemlos einen Zeichenbereich angeben, z. B. [0-9] stellt dieselbe Bedeutung dar /d ist genau das Gleiche: eine Ziffer; ähnlich [a-z0-9A- Z_] ist auch völlig äquivalent zu /w (wenn nur Englisch berücksichtigt wird). Hier ist ein komplexerer Ausdruck: /(?0/d{2}[) -]?/d{8}. „(“ und „)“ sind ebenfalls Metazeichen, die später im Gruppierungsabschnitt erwähnt werden, daher müssen sie hier maskiert werden. Dieser Ausdruck kann mit Telefonnummern in verschiedenen Formaten übereinstimmen, wie etwa (010)88886666 oder 022-22334455, oder 02912345678 usw. Lassen Sie uns etwas analysieren: Erstens handelt es sich um ein Escape-Zeichen /(, das 0 oder 1 Mal vorkommen kann (? ), dann eine 0, gefolgt von 2 Zahlen (/d{2}), dann ( ?) und schließlich 8 Zahlen (/d{8}). ZweigbedingungLeider kann der Ausdruck gerade auch mit 010)12345678 oder (022 -87654321 ist ein „falsches“ Format. Um dieses Problem zu lösen, müssen wir die im regulären Ausdruck verwenden 🎜> bezieht sich auf mehrere Regeln, die als Übereinstimmung gelten. Die spezifische Methode besteht darin, | zu verwenden verstanden? Es spielt keine Rolle, schauen Sie sich das Beispiel an: 0/d{2}-/d{8}|0/d{3}-/d {7} Dieser Ausdruck kann mit zwei durch Bindestrich getrennten Telefonnummern übereinstimmen: eine ist eine dreistellige Ortsvorwahl und eine 8-stellige Ortsnummer (z. B. 010-12345678). Es ist eine 4 -stellige Vorwahl und eine 7-stellige Ortsvorwahl (0376-2233445)/(0/d{2}/)[- ]?/d {. 8}|0/d{2}[- ]?/d{8}Dieser Ausdruck entspricht einer Telefonnummer mit einer dreistelligen Vorwahl, wobei die Vorwahl ist kann in Klammern eingeschlossen werden. Die Vorwahl und die Ortsnummer können durch einen Bindestrich oder ein Leerzeichen getrennt werden, oder es kann keine Trennung erfolgen Sie können es versuchen Verzweigungsbedingungen, um diesen Ausdruck so zu erweitern, dass er auch 4-stellige Vorwahlen unterstützt > /d{5}-/d{4}|/d{5}Dieser Ausdruck wird verwendet, um Postleitzahlen in den Vereinigten Staaten abzugleichen. Die Regel für US-Postleitzahlen ist 5 Ziffern oder 9 Ziffern getrennt durch Bindestriche. Der Grund, warum dieses Beispiel gegeben wird, liegt darin, dass es ein Problem veranschaulichen kann: Achten Sie bei der Verwendung von Verzweigungsbedingungen auf die Reihenfolge jeder Bedingung . Wenn Sie es in /d{5}|/d{5}-/d{4} ändern, dann nur 5-stellige Postleitzahlen (und 9-stellige Postleitzahlen) wird mit den ersten 5 Ziffern der Postleitzahl abgeglichen). Der Grund dafür ist, dass beim Abgleichen der Verzweigungsbedingungen jede Bedingung von links nach rechts getestet wird. Wenn eine bestimmte Verzweigung erfüllt ist, werden andere Bedingungen nicht berücksichtigt. Wir haben bereits erwähnt, wie man ein einzelnes Zeichen wiederholt (fügen Sie einfach das Qualifikationsmerkmal direkt nach dem Zeichen hinzu); aber was ist, wenn Sie mehrere Zeichen wiederholen möchten? Sie können Klammern verwenden, um Unterausdruck (auch Gruppierung genannt) anzugeben, und dann können Sie den Unterausdruck angeben, sobald die Anzahl der Wiederholungen angegeben ist bestimmt, können Sie auch andere Operationen an Unterausdrücken ausführen (wird später vorgestellt). (/d{1,3}/.){3}/d{1,3} ist ein einfaches IP Die Adresse entspricht dem -Ausdruck. Um diesen Ausdruck zu verstehen, analysieren Sie ihn in der folgenden Reihenfolge: /d{1,3} entspricht 1 bis 3 Ziffern, (/d{1,3}/.){3} entspricht drei Ziffern plus einem englischen Punkt (das Ganze ist dieseGruppe ) Wiederholen Sie den Vorgang dreimal und fügen Sie schließlich eine ein- bis dreistellige Zahl hinzu ( /d{1 ,3}). Keine Zahl in einer IP-Adresse darf größer als 255 sein. Lassen Sie sich nicht von den Autoren der dritten Staffel von „24“ täuschen... Leider wird es auch passen256.300.888.999Diese IP-Adresse kann nicht existieren. Wenn Sie einen arithmetischen Vergleich verwenden können, können Sie dieses Problem möglicherweise einfach lösen, aber reguläre Ausdrücke stellen keine mathematischen Funktionen bereit, sodass Sie zur Beschreibung einer korrekten IP-Adresse nur umfangreiche Gruppierungs-, Auswahl- und Zeichenklassen verwenden können: ((2[0-4]/d|25[0-5]|[01]?/d/d?)/.){3}(2[0-4]/d|25 [0 -5]|[01]?/d/d?). Der Schlüssel zum Verständnis dieses Ausdrucks liegt darin, 2[0-4]/d|25[0-5]|[01]?/d/d?, ich werde hier nicht auf Details eingehen, Sie sollten in der Lage sein, die Bedeutung selbst zu analysieren.
代码/语法
说明
*
重复零次或更多次
+
重复一次或更多次
?
重复零次或一次
{n}
重复n次
{n,}
重复n次或更多次
{n,m}
重复n到m次
Zeichenklasse
Verzweigungsbedingung
Gruppe
Das obige ist der detaillierte Inhalt vonEinführungs-Tutorial zu regulären Ausdrücken. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!