Was ist ein regulärer Ausdruck? Regelmäßige Ausdrücke bilden eine Reihe von vordefinierten Charakteren und Kombinationen dieser Charaktere, die zu einer Reihe von Filterlogiken dienen.
Durch Regelmäßigkeiten können folgende Ziele erreicht werden:
给定的字符串是否符合正则表达式的过滤逻辑(称作“匹配”);
可以通过正则表达式,从字符串中获取我们想要的特定部分。
Um es für alle einfacher zu machen, empfehle ich Regextor, eine Software zur Verifizierung von regulären Ausdrücken. Sie können sich diesen Artikel ansehen, in dem ich viele gute Software für Macs empfehle.
Regelmäßige Ausdrücke können nur gewöhnlichen Text enthalten, um genau zu entsprechen; zum Beispiel:
Das ist ein normaler Ausdruck:song
Text zur Übereinstimmung: xiao songge, xiao songge
Das Ergebnis: xiaosong
Ge, xiao Songge
Regelmäßige Ausdrücke werden standardmäßig groß geschrieben, so dass Song nicht mit Song
. wird verwendet, um einen beliebigen Charakter zu vergleichen, z. B.:
Die normale Ausdrucksformel: c.t.
Text: cat cet caaat dog (auf Deutsch)
Das Ergebnis:cat
cet
Kaat-Dog
Analyse: c.t wird mit einer String mit "c
同理,多个连续的.可以匹配多个连续的任意字符:
Die normale Formel: c...t
Text: Cat cet caat dog (auf Deutsch)
Das Ergebnis nach der Übereinstimmung: cat cetcaat
Hunde
. ist ein besonderer Charakter, der in einem regulären Ausdruck eine besondere Bedeutung enthält..\ ist auch ein besonderer Charakter, der eine Transformation von besonderen Charakteren bewirken kann... ist ein echtes "..................................................................
Die normale Ausdrucksformel: c.t.
Wartend Text: cat c.t dog
Das Ergebnis nach der Übereinstimmung: catc.t
Hund
Hinweis: Da \ auch ein Sonderzeichen ist, müssen zwei Rückschlüsse \ verwendet werden, um einen echten \-Zeichen zu finden:
Die normale Ausdrucksform: c\t
Wartend Text: cat c \ t dog
Das Ergebnis nach der Übereinstimmung: catc\t
Hunde
Wie oben erwähnt, kann man einen beliebigen Charakter anpassen, aber was ist, wenn ich mehrere bestimmte Charaktere anpassen möchte?
Die normale Ausdrucksform: c[ab]t
Wartend Text: cat cbt cet
Das Ergebnis:cat
cbt
Das ist es.
Analyse: [ab] wird "a
Wie wäre es in dem Beispiel oben, wenn ich ein CET-Match machen möchte, und einen in [] hinzufüge? Wenn ich einen beliebigen Kleingedruckten matchen möchte, dann ein paar Dutzend? Ja, aber es ist zu lang.
Regelmäßiger Ausdruck: c[a-z]t
Text zur Übereinstimmung: cat cbt czt c2t
Das Ergebnis:cat
cbt
czt
c2t
Analyse: c[a-z]t steht für "beginnt mit c, endet mit t" und in der Mitte steht für den Buchstaben "a" - "z";
Das gleiche gilt auch für:
[0-9] hat die gleiche Funktion wie [0123456789]. [A-F] Passt zu den Großbuchstaben A bis F. [A-Z] Passt alle Großbuchstaben von A bis Z an. [a-z] Passt alle Kleinbuchstaben von a bis z an. [A-z] Passt alle ASCII-Charaktere von A bis zu ASCII-Z ((nicht nur alle Buchstaben, sondern auch die Charaktere von A bis zu z in der ASCII-Tabelle, wie [ und ^ usw.) ‒) [A-Za-z0-9] Passt alle Großbuchstaben und Zahlen an.
Charaktersätze werden in der Regel verwendet, um eine Gruppe von Zeichen anzugeben, die mit ihnen abgestimmt werden müssen. Manchmal möchten Sie jedoch eine Gruppe von Zeichen ausschließen, die Sie nicht mit ihnen vergleichen möchten. Dies kann durch Negation der Charaktersätze erreicht werden.
Die normale Formel ist: c[^a-z]t
Text zur Übereinstimmung: cat cbt czt c2t cAt
Das Ergebnis nach der Übereinstimmung: cat cbt cztc2t
cAt
Analyse: Dies ist das genaue Gegenteil des vorherigen Beispiels.
Beachten Sie, dass das ^ Zeichen alle Charaktere in der Zeichenmenge abschlägt.
Metatags haben besondere Bedeutungen in regulären Ausdrücken, wo wir bereits einige Metatags gesagt haben, wie z.B.................
Alle Metacharaktere können mit einer Gegenverzerrung vorangestellt werden, die nach der Verzerrung den Charakter an sich anstatt an seine besondere Bedeutung anpasst.
Regelmäßiger Ausdruck: a[b]
Text zur Übereinstimmung: a[b ab a[[b
Das Ergebnis:a[b
Ab a [[b]]
Hinweis: \ wird als Transformator verwendet, was auch bedeutet, dass \ auch ein Meta-Character ist.
Die reguläre Ausdrucksform: a\b
Text zur Übereinstimmung: a\b a\b a[[b
Ergebnis nach der Übereinstimmung: a\ba\b
a[[b
Manchmal müssen Sie möglicherweise Leerzeichen, die nicht aus dem Text gedruckt werden können, anpassen. Zum Beispiel möchten Sie alle Tab-Zeichen oder alle Wechselzeichen finden.
Beispielsweise wird \r\n mit einer Hin- und Rückwechselkombination ausgerichtet, die in Windows eine Dateiwechsel darstellt. In Linux und Unix-Systemen ist nur \n erforderlich.
Es gibt einige spezielle Metacharaktere, die verwendet werden können, um häufig verwendete Charaktersätze zu vergleichen. Diese Metacharaktere werden als Matching-Character-Klassen bezeichnet. Sie werden feststellen, dass sie sehr praktisch zu verwenden sind.
Zahlen oder Nicht-Zahlen Wie oben erwähnt, können alle Zahlen mit [0-9] abgestimmt werden. Wenn Sie keine Zahlen mit [^0-9] abgestimmt werden möchten, können Sie [^0-9] verwenden.
Die normale Ausdrucksform: c\dt
Wartend Text: cat c2t czt c9t
Das Ergebnis nach der Übereinstimmung: catc2t
cztc9t
Die normale Ausdrucksform: c\Dt
Wartend Text: cat c2t czt c9t
Das Ergebnis:cat
c2tczt
c9t
Äquivalente Buchstaben und nicht-alphabetische Zeichen
Ein weiterer häufiger verwendeter Klassenzeichen ist \w und \W:
Die normale Ausdrucksform: c\wt
Text zur Übereinstimmung: cat c2t czt c-t c\t
Das Ergebnis:cat
c2t
- Ich weiß nicht.
Die normale Ausdrucksform: c\Wt
Text zur Übereinstimmung: cat c2t c-t c\t
Das Ergebnis nach der Übereinstimmung: cat c2tc-t
c\t
Matching von Leerzeichen und Nichtleerzeichen
Die letzte Matching-Klasse, mit der man konfrontiert wird, ist die Leerzeichenklasse:
Die normale Ausdrucksform: c\st
Text zur Übereinstimmung: cat c t c2t c\t
Das Ergebnis nach der Übereinstimmung: catc t
c2t c\ t
Die normale Ausdrucksformel: c\St
Text zur Übereinstimmung: cat c t c2t c\t
Das Ergebnis:cat
c tc2t
c\t
Ein +-Metazeichen bedeutet, dass ein oder mehrere Zeichen übereinstimmen. Zum Beispiel wird a mit "a" übereinstimmen, während a+ mit einem oder mehreren "a" übereinstimmt.
Die normale Ausdrucksform: cat
Wartend Text: ct cat caat caaat
Das Ergebnis nach der Übereinstimmung: ctcat
Kaat Kaat
Die normale Formel: ca+t
Wartend Text: ct cat caat caaat
Das Ergebnis nach der Übereinstimmung: ctcat
caat
caaat
Wenn + in einer Zeichenmenge verwendet wird, muss das +-Symbol außerhalb der Sammlung platziert werden:
Die normale Ausdrucksform: c[0-9]+t
Text zur Übereinstimmung: ct c0t cat c123t
Das Ergebnis nach der Übereinstimmung: ctc0t
Katzec123t
Analyse: c[0-9]+t steht für eine String mit einer oder mehreren Zahlen in der Mitte.
Natürlich ist [0-9+] auch ein legitimer regulärer Ausdruck, aber er stellt eine Zeichenmenge dar, die die Symbole "0" - "9" und "+" enthält.
Im Allgemeinen werden Metacharaktere wie. und + verwendet, wenn sie für die Charaktersammlung verwendet werden, und müssen daher nicht transformiert werden. Aber es ist auch in Ordnung, sie zu transformieren, so dass die Funktionen von [0-9+] und [0-9+] gleich sind.
Hinweis: + ist ein Meta-Zeichen, das mit "+" übereinstimmt.
Wenn Sie null oder mehr Zeichen anpassen möchten, können Sie die *-Meta-Zeichen verwenden.
Es gibt eine normale Formel: ca*t
Wartend Text: ct cat caat cbt
Das Ergebnis:ct
cat
caat
cbt
Hinweis:* Symbole sind Metacharaktere. Um "*" zu vergleichen, ist eine Umschreibung* erforderlich.
? passen Null oder ein Zeichen.
Es gibt eine normale Formel: ca?t
Wartend Text: ct cat caat cbt
Das Ergebnis:ct
cat
caat cbt
Hinweis:? Symbole sind Meta-Zeichen.
Eine reguläre Ausdrucksformel erlaubt die Angabe der Anzahl der Matches. Die Anzahl kann zwischen den Ketten {
Genaue Anzahl der Matches Um die Anzahl der Matches anzugeben, kannst du eine Zahl zwischen { und } eingeben. Zum Beispiel wird {3} die 3 vorherigen Zeichen oder Sammlungen matchen:
Das ist der normale Ausdruck: ca{3}t
Wartend Text: ct cat caaat cbt
Das Ergebnis nach der Übereinstimmung: ct catcaaat
cbt
Mindestens ein paar Mal.
Wir können auch nur die Mindestwerte für die Übereinstimmung angeben. Zum Beispiel bedeutet {2,}, dass 2 oder mehr Male übereinstimmen:
Das ist der normale Ausdruck: ca{1,} t
Text zur Übereinstimmung: ct cat caaat cbt
Das Ergebnis nach der Übereinstimmung: ctcat
caaat
cbt
Spannungsspannungsmatching
Wir können auch den Mindestwert und den Maximalwert verwenden, um die Anzahl der Matches zu bestimmen. Zum Beispiel bedeutet {2,3}, dass es mindestens 2 und maximal 3 Matches gibt.
Das ist die normale Formel: ca{2,3}t
Wartend Text: ct cat caaat cbt
Das Ergebnis nach der Übereinstimmung: ct catcaaat
cbt
Also? Die Funktion von {0,1} ist die gleiche wie die Funktion von + und {1,} ist die gleiche.
Die meisten Menschen, die in der Welt leben, leben in einer Welt voller Unglück.
Die normale Formel ist: s.*g Text: xiao song xiao song (auf Deutsch) Das Ergebnis: xiao song xiao song Analyse: s.*g passt nicht wie erwartet zu zwei "Songs" zusammen, sondern passt alle Texte zwischen dem ersten Song "s" und dem letzten "g".
Das liegt daran, dass * und + greedy-matches sind. Das heißt, die regulären Ausdrücke suchen immer nach der größten, nicht nach der kleinsten Übereinstimmung, was absichtlich entworfen wurde.
Aber wenn Sie keine gierige Übereinstimmung wünschen, dann verwenden Sie die nicht gierigen Übereinstimmungen dieser Wörter (mit möglichst wenigen Zeichen).
Ja?Das ist eine nicht-gierige Version von Google Play, also kann man*? verwenden, um das Beispiel zu ändern:
正则表达式:s.G?
Schriftzug: xiao song xiao song
Das Ergebnis: xiaosong
Xiaosong
分析:可以看到s.? g passt zu zwei "Songs".
Die String-Border-Matching-Metazeichen sind ^ und $, die jeweils für den Anfang und das Ende der String verwendet werden.
^ Wie folgt:
Die normale Formel lautet: ^ xiao
Text in Erwartung: Xiaosong
Das Ergebnis:xiao
Gesang
Text: Axiaosong (auf Englisch) Das Ergebnis: Axiaosong Analyse: ^ xiao entspricht einer String, die mit "xiao" beginnt.
$ wird wie folgt verwendet:
Die richtige Ausdrucksform: song$
Text in Erwartung: Xiaosong
Das Ergebnis: xiaosong
Text: Xiaosonga (auf Englisch) Das Ergebnis: Xiaosonga Analyse: Song$ passt zu einer String, die mit "song" endet.
Gemeinsam genutzt:
Die normale Formel lautet: ^ [0-9a-zA-Z] {4,} $
Text zur Übereinstimmung: a1b234ABC
Das Ergebnis:a1b234ABC
Text zur Übereinstimmung: + a1b23 = 4ABC Das Ergebnis nach der Übereinstimmung: + a1b23 = 4ABC Analyse: ^[0-9a-zA-Z]{4,} $ ist eine Zahlen- oder Buchstabenmatch, die mehr als vier Stellen umfasst.
Hinweis: ^ ist negativ, wenn es am Anfang der Sammlung liegt; wenn es außerhalb der Sammlung liegt, wird die Startposition der String angepasst.
Allerdings kann man den Mehrzeilen-Modus aktivieren. Im Mehrzeilen-Modus wird der Regelexpressions-Engine ein Wechselzeichen als Separator für die String verwenden, ^ wird den Anfang des Textes oder den Anfang einer Zeile entsprechen, während $ das Ende des Textes oder das Ende einer Zeile entsprechen kann.
Das ist ein Beispiel, das wir geändert haben:
Die normale Formel lautet: ((?m) ^ [0-9a-zA-Z]{4,}$
Text zur Übereinstimmung: a1b234ABC + a1b23 ist 4ABC ABC123456
Das Ergebnis:a1b234ABC
+a1b23=4ABCABC123456
Analyse: ((?m) ^ [0-9a-zA-Z]{4,} $ wird für jede Zeile eine Zahl oder einen Buchstaben ausmachen, und die Ziffern sind größer als die vierstelligen Zeichenkette.
Hinweis: Wenn ein Multiline-Modell verwendet wird, muss ((?m) zu Beginn des regulären Ausdrucks platziert werden. (?m) wird in den meisten Implementierungen nicht unterstützt. Einige Implementierungen unterstützen auch die Verwendung von \A-Matching-String-Anfang und \Z-Matching-String-Ende.
Übersetzt aus dem Broschüre iOS_Chiso Sango