Handbuch zu regulären Ausdrücken

Lesen(27719) Updatezeit(2022-04-13)

Reguläre Ausdrücke, auch reguläre Ausdrücke genannt. (Englisch: Regulärer Ausdruck, im Code oft als Regex, Regexp oder RE abgekürzt), ein Konzept aus der Informatik. Reguläre Tabellen werden normalerweise verwendet, um Text abzurufen und zu ersetzen, der einem bestimmten Muster (Regel) entspricht.


Regulärer Ausdruck ist eine logische Formel für Zeichenfolgenoperationen. Er verwendet einige vordefinierte spezifische Zeichen und Kombinationen dieser spezifischen Zeichen, um eine „Regelzeichenfolge“ zu bilden, die zum Ausdrücken einer Filterlogik für Zeichenfolgen verwendet wird.

Viele Programmiersprachen unterstützen String-Operationen mit regulären Ausdrücken. Beispielsweise verfügt Perl über eine integrierte leistungsstarke Engine für reguläre Ausdrücke. Das Konzept der regulären Ausdrücke wurde ursprünglich durch Tool-Software unter Unix (wie sed und grep) populär gemacht. Reguläre Ausdrücke werden oft als „regex“ abgekürzt, der Singular umfasst regexp, regex und der Plural umfasst regexps, regexes und regexen.

Das erste Beispiel für einen regulären Ausdruck!

Instanz

<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>PHP中文网教程(php.sn)</title>
</head>
<body>

<script>
var str = "abc123def";
var patt1 = /[0-9]+/;
document.write(str.match(patt1));
</script>

</body>
</html>

Instanz ausführen »

Klicken Sie auf die Schaltfläche „Instanz ausführen“, um die Online-Instanz anzuzeigen

Tipp: Unser Tutorial zu regulären Ausdrücken hilft Ihnen dabei, das Wissen über reguläre Ausdrücke vom Anfänger bis zum Fortgeschrittenen zu erlernen. Wenn Sie Fragen haben, besuchen Sie bitte die chinesische PHP-Website Regular Expression Community, um Ihre Fragen zu stellen, und begeisterte Internetnutzer werden sie für Sie beantworten.

Funktionen für reguläre Ausdrücke

  • Sehr flexibel, logisch und funktional;

  • kann schnell eine komplexe Steuerung erreichen Saiten auf äußerst einfache Weise.

  • Für diejenigen, die neu darin sind, ist es relativ unklar.

Da reguläre Ausdrücke hauptsächlich auf Text angewendet werden, werden sie in verschiedenen Texteditoren verwendet, vom berühmten Editor EditPlus bis hin zu Microsoft Word, Visual Studio usw. Große Editoren können reguläre Ausdrücke verwenden Textinhalte zu verarbeiten.

Zweck

Gegeben ein regulärer Ausdruck und eine andere Zeichenfolge, können wir den folgenden Zweck erreichen:

  • Gegebene Zeichen Ob die Zeichenfolge der Filterlogik des regulären Ausdrucks entspricht (genannt „Matching“)

  • Wir können den gewünschten Teil aus der Zeichenfolge durch reguläre Ausdrücke abrufen.

Normale Engine

Normale Engine kann in zwei Hauptkategorien unterteilt werden:

  • Eine davon ist DFA,

  • Eine davon ist NFA.

Beide Motoren haben eine lange Geschichte (mittlerweile mehr als 20 Jahre) und es gibt viele Variationen dieser beiden Motoren! Daher vermeidet die Einführung von POSIX die weitere Generierung unnötiger Varianten. Auf diese Weise werden die regulären Mainstream-Engines in drei Kategorien unterteilt: 1. DFA, 2. traditionelle NFA und 3. POSIX NFA.

DFA-Engines werden in linearer Zeit ausgeführt, da sie kein Backtracking erfordern (und daher nie dasselbe Zeichen zweimal testen). Die DFA-Engine stellt außerdem sicher, dass die längstmögliche Zeichenfolge abgeglichen wird. Da die DFA-Engine jedoch nur einen begrenzten Status enthält, kann sie keine Muster mit Rückverweisen abgleichen, und da sie keine expliziten Erweiterungen erstellt, kann sie keine Unterausdrücke erfassen.

Herkömmliche NFA-Engines führen einen sogenannten „gierigen“ Match-Lookback-Algorithmus aus, der alle möglichen Erweiterungen eines regulären Ausdrucks in einer bestimmten Reihenfolge testet und die erste Übereinstimmung akzeptiert. Da herkömmliches NFA eine spezifische Erweiterung eines regulären Ausdrucks erstellt, um eine erfolgreiche Übereinstimmung zu erhalten, kann es sowohl Teilausdrucksübereinstimmungen als auch übereinstimmende Rückverweise erfassen. Aufgrund der Backtracking-Methode herkömmlicher NFAs kann jedoch mehrmals auf genau denselben Status zugegriffen werden (sofern dieser über unterschiedliche Pfade erreicht wurde). Daher kann es im schlimmsten Fall zu einer sehr langsamen Ausführung kommen. Da die traditionelle NFA die erste Übereinstimmung akzeptiert, die sie findet, kann es auch dazu führen, dass andere (möglicherweise längere) Übereinstimmungen unentdeckt bleiben.

POSIX NFA-Engines ähneln herkömmlichen NFA-Engines, außer dass sie so lange zurückverfolgen, bis sie sicherstellen können, dass sie die längstmögliche Übereinstimmung gefunden haben. Daher ist die POSIX NFA-Engine langsamer als die herkömmliche NFA-Engine, und wenn Sie POSIX NFA verwenden, möchten Sie wahrscheinlich nicht die Reihenfolge der Lookback-Suchen ändern, um kürzere Match-Suchen anstelle längerer Match-Suchen zu unterstützen.

Die Hauptprogramme, die die DFA-Engine verwenden, sind:

awk,egrep,flex,lex,MySQL,Procmail等;

Die Hauptprogramme, die die traditionelle NFA-Engine verwenden, sind:

GNU Emacs,Java,ergp,less,more,.NET语言,PCRE library,Perl,PHP,Python,Ruby,sed,vi;

Verwenden Sie POSIX Die Hauptprogramme der NFA-Engine sind:

mawk,Mortice Kern Systems’ utilities,GNU Emacs(使用时可以明确指定);

Es gibt auch Engines, die einen DFA/NFA-Hybrid verwenden:

GNU awk,GNU grep/egrep,Tcl。

Um den Unterschied zwischen NFA und DFA-Arbeit kurz zu erläutern, wird ein Beispiel gegeben:

Zum Beispiel gibt es eine Zeichenfolge, dies ist Yansens Blog, und der reguläre Ausdruck ist /ya(msen|nsen|nsem)/ (Machen Sie sich keine Sorgen wegen des Ausdrucks, er dient nur zur Veranschaulichung des Arbeitsunterschieds zwischen den Engines.) NFA funktioniert wie folgt. Suchen Sie zunächst nach y in der Zeichenfolge und ermitteln Sie dann, ob ein a folgt. Wenn nicht, prüfen Sie, ob darauf ein n folgt Der msen-Auswahlzweig wird zu diesem Zeitpunkt eliminiert.

Prüfen Sie dann weiter, ob s, e folgt, und testen Sie dann, ob es n ist, ist die Übereinstimmung erfolgreich. Wenn nicht, testen Sie, ob es m ist. Warum m? Da NFA auf regulären Ausdrücken basiert und Zeichenfolgen wiederholt testet, kann es sein, dass dieselbe Zeichenfolge viele Male getestet wird!

Dies ist bei DFA nicht der Fall. DFA sucht darin beginnend bei t und findet y. Wenn bekannt ist, dass darauf ein a folgt, wird geprüft, ob der Ausdruck ein und dort hat ist zufällig ein hier. Dann folgt auf die Zeichenfolge a n und DFA testet die Ausdrücke nacheinander. Zu diesem Zeitpunkt erfüllt msen die Anforderungen nicht und wird eliminiert. nsen und nsem erfüllen die Anforderungen, und dann prüft DFA die Zeichenfolgen nacheinander. Wenn n in sen erkannt wird, erfüllt nur der nsen-Zweig die Anforderungen und die Übereinstimmung ist erfolgreich!

Daraus ist ersichtlich, dass die beiden Engines auf völlig unterschiedliche Weise arbeiten: Die eine (NFA) ist ausdrucksorientiert und die andere (DFA) ist textorientiert! Im Allgemeinen sucht die DFA-Engine schneller! Allerdings ist NFA ausdrucksorientiert und einfacher zu manipulieren, daher bevorzugen die meisten Programmierer NFA-Engines! Beide Engines haben ihre eigenen Stärken und die tatsächliche Zitierung hängt von Ihren Bedürfnissen und der von Ihnen verwendeten Sprache ab.

In diesem Tutorial-Handbuch zu regulären Ausdrücken behandelte Inhalte

Dieses Tutorial zu regulären Ausdrücken deckt alle grundlegenden und fortgeschrittenen Kenntnisse regulärer Ausdrücke ab, einschließlich der Syntax regulärer Ausdrücke, Metazeichen regulärer Ausdrücke, Vorrang von Ausdrucksoperatoren regulärer Ausdrücke und regulärer Ausdrücke Regeln für den Ausdrucksabgleich und mehr.

Tipps: Jedes Kapitel dieses Tutorials enthält viele Beispiele für reguläre Ausdrücke. Sie können direkt auf die Schaltfläche „Beispiel ausführen“ klicken, um die Ergebnisse online anzuzeigen. Mithilfe dieser Beispiele lernen Sie, reguläre Ausdrücke besser zu verstehen.

Andere Referenzressourcen zum Lernen von regulären Ausdrücken

Zusätzlich zur Wissenserweiterung auf der rechten Seite dieser Seite sind auch die folgenden Ressourcen für alle ausgewählt