Heim > Backend-Entwicklung > PHP-Tutorial > Detaillierte Erläuterung regulärer Ausdrücke

Detaillierte Erläuterung regulärer Ausdrücke

步履不停
Freigeben: 2023-04-06 22:52:01
Original
5544 Leute haben es durchsucht

Detaillierte Erläuterung regulärer Ausdrücke

Die Sprache für reguläre Ausdrücke besteht aus zwei grundlegenden Zeichentypen: wörtliche (normale) Textzeichen und Metazeichen.

Verwandte Empfehlungen:
1. Syntax-Tutorial für reguläre Ausdrücke (einschließlich Online-Testtools)
2. Schnellstart-Video-Tutorial für reguläre Ausdrücke 🎜>
Metazeichen verfügt über Verarbeitungsfunktionen mithilfe regulärer Ausdrücke. Metazeichen können jedes einzelne Zeichen sein, das in

platziert ist ([ ] bedeutet beispielsweise, dass ein einzelnes Kleinbuchstabe [a] zutrifft), oder es kann eine Folge von Zeichen sein (wie a bedeutet, dass es mit einem beliebigen Zeichen zwischen Zeichen und [a-d] alle englischen Buchstaben, Zahlen und Unterstriche darstellt), sind gängige Metazeichen wie folgt: a 、b、 c、 dwGemeinsame Metazeichen

ZeichenDer Anfang der passenden Zeichenfolge
Beschreibung Besondere Anweisungen
. Entspricht jedem Zeichen außer Newline (

)

~
[abcde] Entspricht jedem Zeichen in a b c d e Alle Zeichen sind oder
[a-h] Entspricht einem beliebigen Zeichen zwischen und h ~
[^fgh] stimmt mit keinem Zeichen in fgh überein. Fügen Sie ^hinzu > vor dem ersten Zeichen der Klammer
字符 描述 特别说明
. 匹配除换行符(n)以外的任意字符 ~
[abcde] 匹配 a b c d e 之中的任意一个字符 所有字符是 的关系
[a-h] 匹配 ah之间的任意一个字符 ~
[^fgh] 不与 fgh之中的任意一个字符匹配 在 中括号[ ] 的第一个字符前加上 ^ 表示 取反
不匹配中括号里面出现的任意字符
w 匹配大小写英文字符及数字 0 到 9 之间的任意一个及下划线,相当于[a-zA-Z0-9_] ~
W w 相反,相当于 [^a-zA-Z0-9_] ~
s 匹配任意的空白符,相当于 [fnrtv] ~
S s相反,相当于 [^s] ~
d 匹配任何 0 到 9 之间的单个数字,相当于 [0-9] ~
D d 相反,相当于[^0-9] ~
[u4e00-u9fa5] 匹配任意单个汉字(中文)(这里用的是 Unicode 编码表示的汉字) ~
b 匹配单词的开始或结束 ~
^ 匹配字符串的开始 放在中括号的第一个字符前 则变为 取反的意思
$ 匹配字符串的结束 ~
zum Negieren

stimmt mit keinem Zeichen überein, das innerhalb der Klammer erscheint

td> Entspricht englischen Groß- und Kleinbuchstaben, jeder Zahl zwischen 0 und 9 und Unterstrichen, entsprechend [a- zA-Z0-9_] ~ td>
W & Im Gegenteil, äquivalent zu [^a-zA-Z0-9_] ~
s code> entspricht jedem Leerzeichen, äquivalent zu [fnrtv] ~
S ist das Gegenteil von s, entspricht [^s] ~
d Entspricht einer beliebigen einzelnen Zahl zwischen 0 und 9, entspricht [0-9] ~
D ist das Gegenteil von d, äquivalent zu [^0-9] ~
[u4e00-u9fa5] Entspricht einem beliebigen
chinesischen Zeichen (Chinesisch) (hier werden die durch die Unicode-Codierung dargestellten chinesischen Zeichen verwendet)
~
b Passen Sie den Anfang oder das Ende eines Wortes an ~
^ wird vor dem ersten Zeichen der eckigen Klammern platziert und wird umgekehrt
$ Übereinstimmung mit dem Ende der Zeichenfolge ~
Qualifizierer für reguläre Ausdrücke
  1. Funktion: Begrenzen Sie die Häufigkeit des Vorkommens der Einheit vor diesem Symbol.
  2. Einheit:
Wenn was angezeigt wird Bevor ein Zeichen steht, ist dieses Zeichen eine

-EinheitnWenn wir Klammern verwenden, um eine lange Zeichenfolge einzufügen, werden die gesamten Klammern als

-Einheit
字符 描述 特别说明
* 匹配 0 到 多 个元字符,相当于 {0,} ~
? 匹配 0 到 1 个元字符, 相当于 {0,1} ~
+ 匹配至少 1 个元字符,相当于 {1,} ~
{n} 匹配 n 个元字符 ~
{n,} 匹配至少 n 个元字符 ~
{n,m} 匹配 n 到 m 个元字符 ~
b 匹配单词边界 ~
^ 字符串必须以指定的字符开始 ~
$ 字符串必须以指定的字符结束 ~
Die oben genannten Metazeichen werden alle mit einem einzelnen Zeichen abgeglichen. Wenn Sie mehrere Zeichen gleichzeitig abgleichen möchten, müssen Sie auch Qualifikationsmerkmale verwenden (). und m in der Tabelle unten stellen beide Ganzzahlen dar. )

Erklärung – Sonderfall

  1. kann mehrere Metazeichen oder wörtliche Textzeichen mit -Klammern einschließen, um ein 分组 zu bilden, zum Beispiel steht ^(13)[4-9]d{8}$ für jedes Zeichen, das mit beginnt 13 Mobiltelefonnummer beginnend mit.
    1. abcabcabc+ bedeutet, dass der letzte Buchstabe c mindestens einmal vorkommt;
    2. (abcabcabc)+ bedeutet, dass die gesamte Zeichenfolge abcabcabc mindestens einmal vorkommt.
  2. Sie können | verwenden, um die Beziehung zwischen darzustellen. Beispielsweise bedeutet z|j|q, dass mit jedem Buchstaben in z 、j、q übereinstimmt. Tatsächlich entspricht es [zjq].
    1. ab|cd|ef bedeutet: entweder ab, cd oder ef.
    2. a(b|cd|e)f bedeutet: beginnend mit a, entweder b, cd oder e, und schließlich enden mit f.
    3. Zusammenfassung: Die einzige Grenze von | () sind die Klammern (( ))
  3. [0-9A-Z.?] Dies regelmäßig Wie verstehst du?
    1. Wenn . und ? in eckigen Klammern erscheinen, werden . und ? zu normalen Zeichen, also Punkt und Fragezeichen. Sie können verstehen, dass die Priorität von [ ] größer ist als die Priorität von . 和 ?.
    2. Dieser reguläre Ausdruck stimmt genau mit der Zeichenfolge ?aaa.bbb überein. Denken Sie daran, dass . 和 ? hier als normales Zeichen behandelt wird.

Erweitert 1 – Mehrfachauswahlstruktur

Mehrfachauswahlstruktur ist eigentlich die Verwendung von Metazeichen | (oder).
Bereich definieren: Anfang, Ende, Klammern

Regular Bedeutung
Windows98|Windows2000|WindowsXP entspricht Windows98 oder Windows2000 oder WindowsXP
^Windows98|Windows2000|WindowsXP$ Verwenden Sie Windows98-Code > beginnt entweder mit <code>Windows2000 oder endet mit WindowsXP
正则 含义
Windows98|Windows2000|WindowsXP 匹配Windows98或者Windows2000或者WindowsXP
^Windows98|Windows2000|WindowsXP$ Windows98开头或者包含Windows2000或者以WindowsXP结尾
注意^$都包含在|的范围内,因为|的界限只有:开头、结尾、小括号
Windows(98|2000|XP) Windows然后98 或者2000或者XP
Beachten Sie, dass ^ und $ beide im Geltungsbereich von enthalten sind, weil sind nur: Anfang, Ende, Klammern
Windows(98|2000|XP) Windows, dann 98 oder 2000 oder XP

Zusammenfassung: Die Mehrfachauswahlstruktur kann viele Zeichen umfassen, aber die Grenzen von 括号 nicht überschreiten.

Erweitert 2 – Gruppierung und Rückverweise

Gruppierung

  • Wir wissen bereits, wie man ein einzelnes Zeichen wiederholt. Was soll ich tun, wenn ich es wiederholen möchte? eine Schnur? Sie
  • können Unterausdrücke (auch Gruppierungen genannt)
  • mithilfe von Klammern angeben.
  • Einfacher IP-Adress-Übereinstimmungsausdruck
  • (d{1,3}.){3}d{1,3}, aber es wird auch die unmögliche IP-Adresse
  • 256.300.888.999
  • abgeglichen. Können Sie einen genaueren regulären Ausdruck schreiben? Übereinstimmung Der Text dieses Unterausdrucks kann von zur weiteren Verarbeitung innerhalb des Ausdrucks oder anderer Programme erfasst werden.
  • Standardmäßig hat jede Gruppe automatisch eine Gruppennummer. Die Regeln lauten: ((2[0-4]d|25[0-5]|[01]?dd?).){3}(2[0-4]d|25[0-5]|[01]?dd?)Mit dem
  • der Gruppe als Markierung ist die Gruppennummer der ersten Gruppe von links nach rechts 1. Der zweite ist 2 und so weiter
.

  • Beispiel:
  • kann verwendet werden, um wiederholte Wörter zuzuordnen.
  • entspricht beispielsweise: 左括号

Einfache Erklärung: In regulären Ausdrücken werden Klammern verwendet, um die Vorderseite zu unterteilen (gruppieren), und dann wird der durch die Klammern übereinstimmende Inhalt

in Anführungszeichen gesetzt
    Später werden sie durch
  • , b(w+)bs+1b usw. dargestellt. (Die erste Klammer ist
  • ...). Wenn Klammern in Klammern
  • verschachtelt sind, denken Sie daran: Verwenden Sie zu diesem Zeitpunkt where where go, tom tom happy als Markierung und zählen Sie die Klammern einfach von links nach rechts.
Erweitert 3 – Umsehen (Zero-Breite-Behauptung)

Umsehen stimmt mit keinem Zeichen überein, sondern nur mit der
spezifischen Position im Text. Ähnlich wie , 1, 2. 1Umschauen beansprucht keine Zeichen. (w+(.?))(

Umsehen ist in zwei Arten unterteilt:

Bestellung

und
    umgekehrte Reihenfolge
  • : Bestellungb^$ hinter der Position kann mit
  • übereinstimmen. Beispiel:
  • Rechts von der aktuellen Position stehen Zahlen. hinter der Position kann nicht übereinstimmen
    • . Beispiel:
        Die rechte Seite der aktuellen Position ist keine Zahl.
      • (?=exp)In umgekehrter Reihenfolge exp(?=d)
      • vor der Position kann (?!exp) übereinstimmen. Beispiel: Die linke Seite der aktuellen Position ist die Zahl exp(?!d)
      • . Das
      vor der Position kann nicht mit
    • übereinstimmen. Beispiel:
        Die linke Seite der aktuellen Position ist keine Zahl.
      • (?<=exp)exp(?<=d)
      • Fortgeschritten 4 – Gier und Faulheit
      • (?<!exp)Wenn der reguläre Ausdruck einen Quantifizierer enthält, der Wiederholungen akzeptiert Das übliche Verhalten von exp besteht darin, so viele Zeichen (?!d) wie möglich zu finden.
      Regulärer Ausdruck:
    • , der mit der längsten Zeichenfolge übereinstimmt, die mit
    beginnt und mit
  • endet. Wenn Sie damit nach
suchen, wird die gesamte Zeichenfolge

gefunden, die als -------

Greedy Matching
  • -Wir benötigen +Lazy Matching*, d >. Auf diese Weise bedeutet {3,12}, dass eine beliebige Anzahl von Wiederholungen abgeglichen wird, aber die wenigsten Wiederholungen von verwendet werden, die das gesamte -Match erfolgreich machen.
  • a.*b entspricht der kürzesten Zeichenfolge, die mit a beginnt und mit b endet. Wenn Sie es auf aabab anwenden, stimmt es mit aabab und überein.
  • Zusammenfassung:
  • Der Unterschied zwischen Greedy- und Lazy-Modus ist: Lazy-Modus hat ein zusätzliches Fragezeichen nach dem Quantifizierer ? . .*?Fortgeschritten 5 – Priorität des Mustervergleichs
  • Bei der Verwendung regulärer Ausdrücke müssen Sie auf die Reihenfolge des Vergleichs achten. Normalerweise wird die gleiche Priorität a.*?b von links nach rechts a berechnet, und Vorgänge mit unterschiedlichen Prioritäten sind b zuerst hoch und dann niedrig aabab. Die übereinstimmende Reihenfolgenpriorität verschiedener Operatoren aab reicht von hoch nach niedrig ab, wie in der folgenden Tabelle dargestellt.
  • 顺序 元字符 描述
    1 转义字符
    2 ()(?:)(?=)[] 模式单元和原子表
    3 *+{n}{n,}{n,m} 重复匹配
    4 ^$bBAZ 边界限制
    5 | 模式选择

    Beispiel

    1. Zeichen-Escape

    1F: Wie soll ich den regulären Ausdruck schreiben, damit er mit dem 33333333333 in der Zeichenfolge $ übereinstimmt?
    2Q: Wenn die Funktion preg_match in PHP die Ausdrücke einfache Anführungszeichen bzw. doppelte Anführungszeichen verwendet, um mit dem obigen $ übereinzustimmen, wie schreibt man das?

    Antwort:

    • Die für den Ausdruck erforderliche Regel lautet: $
    • Verwenden Sie einfache Anführungszeichen, um die obige Zeichenfolge darzustellen '/\$/' . (Zur einfacheren Anzeige teilen wir es in '/\  \  \  $/' auf.)
    • Verwenden Sie doppelte Anführungszeichen, um die obige Zeichenfolge darzustellen "/\$/". (Zur besseren Übersicht haben wir es in "/\  \  \  $/" aufgeteilt)
    • Was fragen Sie?

    Eine andere Antwort:

  1. Einfache Anführungszeichen in PHP maskieren keine Zeichen, aber nur wird maskiert, wir brauchen also 6 um Ausdrücke zu generieren.
  2. Zusätzlich zum Escapezeichen benötigen doppelte Anführungszeichen auch ein weiteres zum Escapezeichen $, daher sind 7 erforderlich.

Verwandte Tutorial-Empfehlungen: PHP-Video-Tutorial

Das obige ist der detaillierte Inhalt vonDetaillierte Erläuterung regulärer Ausdrücke. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Verwandte Etiketten:
Quelle:php.cn
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage