Regulärer Ausdruck ist eine logische Formel für Zeichenfolgenoperationen. Es handelt sich um eine wichtige und komplexe Technologie bei der Verarbeitung von Textdaten. Wie kann man reguläre Ausdrücke schnell beherrschen? Der folgende Artikel empfiehlt eine Lernmethode: durch AST. Hoffe, es hilft allen!
Reguläre Ausdrücke werden grundsätzlich zum Verarbeiten von Zeichenfolgen verwendet. Sie sind sehr praktisch, um Zeichenfolgen abzugleichen, zu extrahieren und zu ersetzen.
Das Erlernen regulärer Ausdrücke ist jedoch immer noch etwas schwierig, z. B. Konzepte wie gieriges Matching, nicht gieriges Matching, Erfassen von Untergruppen und Nicht-Erfassen von Untergruppen. Es ist nicht nur für Anfänger schwer zu verstehen, sondern auch für viele Menschen, die dies getan haben Ich habe mehrere Jahre gearbeitet und verstehe es nicht.
Wie lernt man reguläre Ausdrücke besser? Wie beherrscht man reguläre Ausdrücke schnell?
Empfehle eine Möglichkeit, regelmäßige Regeln zu lernen, die ich für sehr gut halte: Lernen durch AST.
Das Matching-Prinzip regulärer Ausdrücke besteht darin, die Musterzeichenfolge in AST zu analysieren und dann dieses AST zum Abgleichen der Zielzeichenfolge zu verwenden.
Verschiedene Informationen in der Musterzeichenfolge werden nach der Analyse in AST gespeichert. AST ist ein abstrakter Syntaxbaum, der nach einer grammatikalischen Struktur organisiert ist. Anhand der Struktur von AST können Sie die von regulären Ausdrücken unterstützte Syntax leicht erkennen.
Wie kann ich den AST eines regulären Ausdrucks anzeigen?
Sie können es visuell über die Website astexplorer.net anzeigen:
Stellen Sie die Analysesprache auf RegExp um und Sie können den AST regulärer Ausdrücke visualisieren.
Wie bereits erwähnt, ist AST ein Baum, der nach Grammatik organisiert ist, sodass verschiedene Grammatiken leicht aus seiner Struktur heraussortiert werden können.
Dann lernen wir verschiedene Syntaxen aus der Perspektive von AST:
Beginnen wir mit der einfachen Syntax, /abc/, und ihr AST ist so :
3 Zeichen, die Werte sind a, b, c und der Typ ist einfach. Der anschließende Abgleich besteht darin, den AST zu durchlaufen und jeweils diese drei Zeichen abzugleichen.
Wir haben es mit der Exec-API getestet:
Das 0. Element ist die übereinstimmende Zeichenfolge und Index ist der Startindex der übereinstimmenden Zeichenfolge. Eingabe ist die Eingabezeichenfolge.
Versuchen wir es noch einmal mit Sonderzeichen:
/ddd/ bedeutet die Zuordnung von drei Zahlen, und d ist ein Metazeichen (Metazeichen) mit besonderer Bedeutung, das durch reguläre Ausdrücke unterstützt wird.
Aus AST können wir auch ersehen, dass sie zwar auch Char sind, ihr Typ jedoch tatsächlich Meta ist:
Sie können jede Zahl über das Metazeichen von d abgleichen:
Welche sind Meta-Char und welche Sind einfach char , es ist auf einen Blick durch AST klar.
Regular unterstützt die Angabe eines Zeichensatzes über [], was bedeutet, dass es mit jedem der Zeichen übereinstimmen kann.
Aus AST können wir auch ersehen, dass es mit einer Schicht von CharacterClass umhüllt ist, was bedeutet, dass es sich um eine Zeichenklasse handelt, das heißt, es kann mit jedem darin enthaltenen Zeichen übereinstimmen.
Das ist im Test tatsächlich der Fall:
Regulärer Ausdruck unterstützt die Angabe, wie oft ein bestimmtes Zeichen wiederholt wird, unter Verwendung der Form {von, bis} ,
Zum Beispiel bedeutet /b{1,3}/, dass das Zeichen b ein- bis dreimal wiederholt wird, und /[abc]{1,3}/ bedeutet, dass die Zeichenklasse a/b/c 1 Mal wiederholt wird bis 3 mal.
Wie Sie in AST sehen können, heißt diese Syntax Wiederholung:
Es verfügt über ein Quantifiziererattribut zur Darstellung des Quantifizierers, und der Typ hier ist ein Bereich von 1 bis 3.
Regular unterstützt auch die Abkürzungen einiger Quantoren, z. B. + für 1 bis unzählige Male, * für 0 bis unzählige Male und ? für 0 oder 1 Mal.
sind verschiedene Arten von Quantoren:
Einige Schüler fragen sich vielleicht: Was bedeutet das Attribut „gierig“ hier?
gierig bedeutet gierig. Dieses Attribut gibt an, ob es sich bei dieser Wiederholung um eine gierige Übereinstimmung oder eine nicht gierige Übereinstimmung handelt.
Wenn Sie nach dem Quantifizierer ein ? hinzufügen, werden Sie feststellen, dass „gierig“ zu „falsch“ wird, was bedeutet, dass auf „nicht gierig“ umgestellt wird:
Was bedeuten also „gierig“ und „nicht gierig“?
Sehen wir uns ein Beispiel an.
Der standardmäßige Wiederholungsabgleich ist gierig und wird weiterhin abgeglichen, solange die Bedingungen erfüllt sind, sodass acbac hier abgeglichen werden kann.
Fügen Sie nach dem Quantifizierer ein ? hinzu, um auf „nicht gierig“ zu wechseln, und nur der erste wird abgeglichen:
Dies ist ein gieriges Matching und ein nicht gieriges Matching. Wir können das eindeutig erkennen Nicht gierig sind für die repetitive Syntax. Fügen Sie nach dem Quantifizierer ein ? hinzu, um zu nicht gierig zu wechseln.
(aaa)bbb(ccc)Regulärer Ausdruck unterstützt die Rückgabe eines Teils der übereinstimmenden Zeichenfolge in eine Untergruppe über (). Sehen Sie sich den AST an:capture für Untergruppen gilt. Der Standardwert ist Capture, was bedeutet, dass der Inhalt der Untergruppe durch ?: extrahiert wird und der Inhalt der Untergruppe nicht extrahiert wird .
Wir sind bereits mit der Verwendung von AST vertraut, um die reguläre Syntax zu verstehen, aber schauen wir uns etwas etwas Schwierigeres an: /bbb(?=ccc)/Reguläre Ausdrücke unterstützen das Ausdrücken von Lookahead-Behauptungen durch die Syntax von (?= xxx) wird verwendet, um zu bestimmen, ob einer bestimmten Zeichenfolge eine bestimmte Zeichenfolge vorangestellt ist. Sie können über AST sehen, dass diese Syntax Assertion heißt und der Typ Lookahead ist, was bedeutet, dass er nach vorne schaut und nur mit der vorherigen Bedeutung übereinstimmt:Lookahead-Behauptung bedeutet, dass einer bestimmten Zeichenfolge eine bestimmte Zeichenfolge vorangestellt ist, die entsprechende Untergruppe nicht erfasst wird und die bestätigte Zeichenfolge nicht im Übereinstimmungsergebnis angezeigt wird.
Wenn diese Zeichenfolge nicht folgt, wird sie nicht übereinstimmen:
Wenn es eine vorhergehende Behauptung gibt, wird es natürlich eine nachfolgende Behauptung geben, das heißt, sie passt nur, wenn ihr eine bestimmte Zeichenfolge folgt. 🎘 (?
Look-Ahead-Assertion und Look-Behind-Assertion sind die am schwierigsten zu verstehende Syntax für reguläre Ausdrücke. Ist es nicht viel einfacher, sie zu verstehen? AST~
Zusammenfassung
Zum Beispiel haben wir es durch AST klargestellt:
Untergruppensyntax (Gruppe) wird zum Extrahieren einer bestimmten Zeichenfolge verwendet. Die Standardeinstellung ist die Erfassung (Erfassung ist wahr), was bedeutet, dass eine Extraktion erforderlich ist (?:xxx), die nur übereinstimmt aber nicht extrahieren.
Assertion bedeutet, dass davor oder danach eine bestimmte Zeichenfolge steht, die in Lookahead-Assertion und Lookbehind-Assertion unterteilt ist. Die Syntax lautet (?=xxx) und (?
Ist es das tiefe Verständnis der Syntax in verschiedenen Dokumenten oder das tiefe Verständnis der Syntax im Compiler? Keine Frage, es muss am Compiler liegen!Dann ist es natürlich besser, die Grammatik über den Syntaxbaum zu lernen, der entsprechend der Grammatik analysiert wird, als über das Dokument.
Reguläre Ausdrücke sind so, und das Erlernen anderer Grammatik ist auch so. Wenn Sie die Grammatik mit AST lernen können, müssen Sie die Dokumentation nicht lesen.Weitere Informationen zu Knoten finden Sie unter: nodejs-Tutorial
!Das obige ist der detaillierte Inhalt vonWie beherrscht man reguläre Ausdrücke schnell? Lernen Sie reguläre Grammatik mit AST!. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!