Reguläre Ausdrücke -Übereinstimmungsregeln

Grundlegende Musterübereinstimmung

Alles beginnt mit den Grundlagen. Muster sind die grundlegendsten Elemente regulärer Ausdrücke; sie sind Zeichenmengen, die Zeichenketteneigenschaften beschreiben. Muster können sehr einfach sein und aus gewöhnlichen Zeichenketten bestehen, oder sehr komplex, wobei häufig Sonderzeichen verwendet werden, um einen Zeichenbereich, Wiederholung oder Kontext darzustellen. Zum Beispiel:

^once

Dieses Muster enthält ein Sonderzeichen^, was bedeutet, dass das Muster nur auf Zeichenketten passt, die mitoncebeginnen. Zum Beispiel passt das Muster auf die Zeichenkette"once upon a time", und passt nicht auf"There once was a man from NewYork". So wie das^Symbol den Anfang kennzeichnet, wird das$Symbol verwendet, um auf Zeichenketten zu passen, die mit einem gegebenen Muster enden.

bucket$

Dieses Muster passt auf"Who kept all of this cash in a bucket", und passt nicht auf"buckets". Wenn die Zeichen^und$werden zusammen verwendet; sie zeigen eine exakte Übereinstimmung an (die Zeichenkette ist genau dieselbe wie das Muster). Zum Beispiel:

^bucket$

stimmt nur mit der Zeichenkette"bucket"überein. Wenn ein Muster^und$nicht enthält, stimmt es mit jeder Zeichenkette überein, die das Muster enthält. Zum Beispiel das Muster:

once

stimmt mit der Zeichenkette überein

There once was a man from NewYork
Who kept all of his cash in a bucket.

.

In diesem Muster sind die Buchstaben(o-n-c-e)literale Zeichen; das heißt, sie stehen für die Buchstaben selbst, und dasselbe gilt für Zahlen. Einige andere, etwas komplexere Zeichen wie Satzzeichen und Leerraum (Leerzeichen, Tabs usw.) erfordern Escape-Sequenzen. Alle Escape-Sequenzen beginnen mit einem Backslash\. Die Escape-Sequenz für einen Tabulator ist\t. Wenn wir also testen wollen, ob eine Zeichenkette mit einem Tabulator beginnt, können wir dieses Muster verwenden:

^\t 

Verwenden Sie auf ähnliche Weise\n, um"newline",\r, um Wagenrücklauf darzustellen. Bei anderen Sonderzeichen können Sie einen Backslash davor setzen; zum Beispiel wird der Backslash selbst dargestellt durch\\, der Punkt durch., verwenden Sie\., und so weiter.

Zeichencluster

In Internetprogrammen werden reguläre Ausdrücke häufig verwendet, um Benutzereingaben zu validieren. Nachdem ein Benutzer ein Formular abgeschickt hat, reichen gewöhnliche literale Zeichen nicht aus, um festzustellen, ob die eingegebene Telefonnummer, Adresse, E-Mail-Adresse, Kreditkartennummer usw. gültig sind.

Es wird also eine flexiblere Möglichkeit benötigt, das gewünschte Muster zu beschreiben, und das ist der Zeichencluster. Um einen Zeichencluster zu erstellen, der alle Vokalzeichen repräsentiert, setzen Sie alle Vokalzeichen in eckige Klammern:

[AaEeIiOoUu]

Dieses Muster stimmt mit jedem Vokalzeichen überein, kann aber nur ein Zeichen repräsentieren. Ein Bindestrich kann verwendet werden, um einen Bereich von Zeichen darzustellen, wie zum Beispiel:

[a-z] // 匹配所有的小写字母 
[A-Z] // 匹配所有的大写字母 
[a-zA-Z] // 匹配所有的字母 
[0-9] // 匹配所有的数字 
[0-9\.\-] // 匹配所有的数字,句号和减号 
[ \f\r\t\n] // 匹配所有的白字符

Ähnlich repräsentieren diese ebenfalls nur ein Zeichen, was ein sehr wichtiger Punkt ist. Um eine Zeichenkette abzugleichen, die aus einem Kleinbuchstaben und einer Ziffer besteht, wie "z2", "t6" oder "g7", aber nicht "ab2", "r2d3" oder "b52", verwenden Sie dieses Muster:

^[a-z][0-9]$

Obwohl[a-z]den Bereich von 26 Buchstaben repräsentiert, kann es hier nur mit Zeichenketten übereinstimmen, deren erstes Zeichen ein Kleinbuchstabe ist.

Früher wurde erwähnt, dass ^ den Anfang einer Zeichenkette darstellt, aber es hat eine andere Bedeutung. Wenn es innerhalb einer Menge eckiger Klammern verwendet wird,^bedeutet es "nichtoder "ausschließen", und wird oft verwendet, um ein Zeichen zu eliminieren. Unter Verwendung des vorherigen Beispiels verlangen wir, dass das erste Zeichen keine Ziffer sein darf:

^[^0-9][0-9]$

Dieses Muster stimmt mit "&5", "g7" und "-2" überein, aber nicht mit "12" oder "66". Die folgenden sind einige Beispiele für das Ausschließen bestimmter Zeichen:

[^a-z] //除了小写字母以外的所有字符 
[^\\\/\^] //除了(\)(/)(^)之外的所有字符 
[^\"\'] //除了双引号(")和单引号(')之外的所有字符

Sonderzeichen.(Punkt, Punkt) wird in regulären Ausdrücken verwendet, um alle Zeichen außer "Zeilenumbruch" darzustellen. Also stimmt das Muster^.5$mit jeder aus zwei Zeichen bestehenden Zeichenkette überein, die mit der Ziffer 5 endet und mit einem beliebigen anderen Nicht-Zeilenumbruch-Zeichen beginnt. Das Muster.kann mit jeder Zeichenkette übereinstimmen,außer Zeilenumbruchzeichen (\n, \r)。

PHP-reguläre Ausdrücke verfügen über einige integrierte allgemeine Zeichencluster, die wie folgt aufgeführt sind:

Zeichencluster Beschreibung
[[:alpha:]] Beliebiger Buchstabe
[[:digit:]] Beliebige Ziffer
[[:alnum:]] Beliebiger Buchstabe oder Ziffer
[[:space:]] Beliebiges Whitespace-Zeichen
[[:upper:]] Beliebiger Großbuchstabe
[[:lower:]] Beliebiger Kleinbuchstabe
[[:punct:]] Beliebiges Satzzeichen
[[:xdigit:]] Beliebige Hexadezimalziffer, entspricht [0-9a-fA-F]

Wiederholte Vorkommen bestimmen

Bisher wissen Sie, wie man einen Buchstaben oder eine Ziffer abgleicht, aber häufiger müssen Sie vielleicht ein Wort oder eine Gruppe von Ziffern abgleichen. Ein Wort besteht aus mehreren Buchstaben, und eine Gruppe von Ziffern besteht aus mehreren einzelnen Ziffern. Geschweifte Klammern ({}) nach einem Zeichen oder Zeichen-Cluster bestimmen die Anzahl der Wiederholungen des vorangehenden Inhalts.

Zeichencluster Beschreibung
^[a-zA-Z_]$ Alle Buchstaben und Unterstriche
^[[:alpha:]]{3}$ Alle Wörter mit 3 Buchstaben
^a$ Der Buchstabe a
^a{4}$ aaaa
^a{2,4}$ aa, aaa oder aaaa
^a{1,3}$ a, aa oder aaa
^a{2,}$ Zeichenketten, die mehr als zwei a enthalten
^a{2,} z. B. aardvark und aaab, aber nicht apple
a{2,} z. B. baad und aaa, aber nicht Nantucket
\t{2} Zwei Tabulatorzeichen
.{2} Alle Zeichenketten aus zwei Zeichen

Diese Beispiele zeigen drei verschiedene Verwendungen von geschweiften Klammern. Eine Zahl{x} bedeutet, dass das vorhergehende Zeichen oder die vorhergehende Zeichengruppe genau x-mal vorkommt; eine Zahl gefolgt von einem Komma{x,}bedeutetder vorhergehende Inhalt x-mal oder häufiger vorkommt; zwei durch ein Komma getrennte Zahlen{x,y}bedeuten, dass der vorhergehende Inhalt mindestens x-mal, aber höchstens y-mal vorkommt. Wir können das Muster auf weitere Wörter oder Ziffern erweitern:

^[a-zA-Z0-9_]{1,}$      // 所有包含一个以上的字母、数字或下划线的字符串 
^[1-9][0-9]{0,}$        // 所有的正整数 
^\-{0,1}[0-9]{1,}$      // 所有的整数 
^[-]?[0-9]+\.?[0-9]+$   // 所有的浮点数

Das letzte Beispiel ist etwas schwierig, nicht wahr? Betrachten Sie es so: Beginnen Sie mit einem optionalen Minuszeichen ([-]?) am Anfang (^), gefolgt von einer oder mehreren Ziffern ([0-9]+), einem Dezimalpunkt (\.), dann gefolgt von einer oder mehreren Ziffern([0-9]+), und danach nichts weiter ($). Im Folgenden lernen Sie eine einfachere Methode kennen, die verwendet werden kann.

Sonderzeichen?und{0,1}sind gleich; sie bedeuten beide:0 oder 1 des vorhergehenden Inhaltsoderder vorhergehende Inhalt ist optional. Das vorherige Beispiel kann also vereinfacht werden zu:

^\-?[0-9]{1,}\.?[0-9]{1,}$

Sonderzeichen*und{0,}sind gleich; sie bedeuten beide0 oder mehr des vorhergehenden Inhalts. Schließlich sind die Zeichen+und{1,}gleich und bedeuten1 oder mehr des vorhergehenden Inhalts, sodass die vier obigen Beispiele geschrieben werden können als:

^[a-zA-Z0-9_]+$      // 所有包含一个以上的字母、数字或下划线的字符串 
^[1-9][0-9]*$        // 所有的正整数 
^\-?[0-9]+$          // 所有的整数 
^[-]?[0-9]+(\.[0-9]+)?$ // 所有的浮点数

Natürlich reduziert dies technisch gesehen nicht die Komplexität regulärer Ausdrücke, aber es kann sie leichter lesbar machen.

Andere Erweiterungen