Systematische Erlernung von regulären Ausdrücken: Grundlagen

Schriftsteller:Kleine Träume, Erstellt: 2017-03-29 10:52:47, Aktualisiert: 2020-11-18 12:39:53

Systematische Erlernung von regulären Ausdrücken: Grundlagen

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.

    img

Hier beginnen wir mit den Regeln für die Regelmäßigkeiten:

  • Siehe auch: Matching normaler Textzeichen

    Regelmäßige Ausdrücke können nur gewöhnlichen Text enthalten, um genau zu entsprechen; zum Beispiel:

    Das ist ein normaler Ausdruck:songText zur Übereinstimmung: xiao songge, xiao songge Das Ergebnis: xiaosongGe, xiao Songge Regelmäßige Ausdrücke werden standardmäßig groß geschrieben, so dass Song nicht mit Song übereinstimmt.

  • Spielen Sie beliebige Zeichen

    . 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 cetKaat-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 cetcaatHunde

  • Spezielle Zeichen passen

    . 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.tHund 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\tHunde

  • Verwendung von Zeichengruppen

    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 cbtDas ist es. Analyse: [ab] wird "a oder b " passen. So wird c[ab]t cat und cbt passen, ohne cet zu passen.

  • Benutzen Sie die Zeichenpalette

    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 cztc2t 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.

  • Nicht-Characterset-Matching

    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 cAtAnalyse: Dies ist das genaue Gegenteil des vorherigen Beispiels.

    Beachten Sie, dass das ^ Zeichen alle Charaktere in der Zeichenmenge abschlägt.

  • Erstzeichen

    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[bAb 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\ba[[b

  • Leerzeichen

    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.

    img

    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.

  • Siehe auch:

    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.

    img

    Die normale Ausdrucksform: c\dt Wartend Text: cat c2t czt c9t Das Ergebnis nach der Übereinstimmung: catc2tcztc9t

    Die normale Ausdrucksform: c\Dt Wartend Text: cat c2t czt c9t Das Ergebnis:catc2tcztc9t Äquivalente Buchstaben und nicht-alphabetische Zeichen Ein weiterer häufiger verwendeter Klassenzeichen ist \w und \W:

    img

    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\tMatching von Leerzeichen und Nichtleerzeichen Die letzte Matching-Klasse, mit der man konfrontiert wird, ist die Leerzeichenklasse:

    img

    Die normale Ausdrucksform: c\st Text zur Übereinstimmung: cat c t c2t c\t Das Ergebnis nach der Übereinstimmung: catc tc2t c\ t

    Die normale Ausdrucksformel: c\St Text zur Übereinstimmung: cat c t c2t c\t Das Ergebnis:catc tc2t c\t

  • Eine oder mehrere Zeichen passen.

    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: ctcatKaat Kaat

    Die normale Formel: ca+t Wartend Text: ct cat caat caaat Das Ergebnis nach der Übereinstimmung: ctcat caat caaatWenn + 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: ctc0tKatzec123tAnalyse: 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.

  • Siehe auch: 0 oder mehr Zeichen

    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 caatcbt Hinweis:* Symbole sind Metacharaktere. Um "*" zu vergleichen, ist eine Umschreibung* erforderlich.

  • Sie können nur ein Zeichen oder eine Null anpassen.

    ? passen Null oder ein Zeichen.

    Es gibt eine normale Formel: ca?t Wartend Text: ct cat caat cbt Das Ergebnis:ct catcaat cbt Hinweis:? Symbole sind Meta-Zeichen.

  • Die Anzahl der Matches

    Eine reguläre Ausdrucksformel erlaubt die Angabe der Anzahl der Matches. Die Anzahl kann zwischen den Ketten { } und {\displaystyle \mathbb { }} angegeben werden. Hinweis: {und} sind auch Metacharaktere, die bei der Verwendung von wörtlichen Bedeutungen umgesetzt werden müssen.

    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 catcaaatcbt 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 caaatcbt 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 catcaaatcbt Also? Die Funktion von {0,1} ist die gleiche wie die Funktion von + und {1,} ist die gleiche.

  • Nicht gierige Übereinstimmung

    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).

    img

    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: xiaosongXiaosong 分析:可以看到s.? g passt zu zwei "Songs".

  • Definieren Sie die Stringgrenze

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

    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.

  • Multi-Zeilen-Modus

    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=4ABCABC123456Analyse: ((?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.

Die Grundlagen dieses Artikels sind zu lesen, um die systematische Erforschung der regulären Ausdrücke zu erlernen.

Übersetzt aus dem Broschüre iOS_Chiso Sango


Mehr