Heim >Web-Frontend >js-Tutorial >Ein 30-minütiges Tutorial für Anfänger zu regulären Ausdrücken

Ein 30-minütiges Tutorial für Anfänger zu regulären Ausdrücken

云罗郡主
云罗郡主Original
2019-01-25 13:53:192581Durchsuche

Was genau sind reguläre Ausdrücke? Die folgende chinesische PHP-Website führt Sie in reguläre Ausdrücke ein. [Empfohlene Lektüre: Video-Tutorial zu regulären Ausdrücken]

Beim Schreiben von Programmen oder Webseiten, die Zeichenfolgen verarbeiten, müssen häufig Zeichenfolgen gefunden werden, die bestimmten komplexen Regeln entsprechen. Reguläre Ausdrücke sind Werkzeuge zur Beschreibung dieser Regeln. Mit anderen Worten: Reguläre Ausdrücke sind Codes, die Textregeln aufzeichnen.

Es ist sehr wahrscheinlich, dass Sie für die Dateisuche unter Windows/Dos Platzhalterzeichen (Wildcard) verwendet haben, also * und ?. Wenn Sie alle Word-Dokumente in einem bestimmten Verzeichnis finden möchten, suchen Sie nach *.doc. Hier wird * als beliebige Zeichenfolge interpretiert. Ähnlich wie Wildcards sind reguläre Ausdrücke auch Werkzeuge für den Textabgleich, aber sie können Ihre Anforderungen genauer beschreiben als Wildcards – natürlich auf Kosten der Komplexität – Sie können beispielsweise einen regulären Ausdruck schreiben, der zum Finden aller verwendet wird Zeichenfolgen, die mit 0 beginnen, gefolgt von 2–3 Ziffern, dann einem Bindestrich „-“ und schließlich 7 oder 8 Ziffern.

Erste Schritte

Der beste Weg, reguläre Ausdrücke zu lernen, besteht darin, mit Beispielen zu beginnen. Nachdem Sie die Beispiele verstanden haben, können Sie die Beispiele ändern und experimentieren. Nachfolgend finden Sie einige einfache Beispiele, die im Detail erläutert werden.

Angenommen, Sie suchen in einem englischen Roman nach „hi“, dann können Sie den regulären Ausdruck „hi“ verwenden.

Dies ist fast der einfachste reguläre Ausdruck. Er kann eine Zeichenfolge wie diese genau abgleichen: Sie besteht aus zwei Zeichen, das erste Zeichen ist h und das nächste Zeichen ist i. Normalerweise bieten Tools, die reguläre Ausdrücke verarbeiten, eine Option zum Ignorieren der Groß-/Kleinschreibung. Wenn diese Option ausgewählt ist, kann sie mit jeder der vier Groß-/Kleinschreibungen hi, HI, Hi und hI übereinstimmen.

Leider enthalten viele Wörter die beiden aufeinanderfolgenden Zeichen „Hallo“, wie „He“, „History“, „High“ usw. Wenn Sie „hi“ zur Suche verwenden, wird das „Hi“ auch hier gefunden. Wenn wir das Wort „hi“ genau finden wollen, sollten wir „bhib“ verwenden.

b ist ein spezieller Code, der durch einen regulären Ausdruck angegeben wird (manche Leute nennen ihn ein Metazeichen), der den Anfang oder das Ende eines Wortes darstellt, also die Grenze eines Wortes. Obwohl englische Wörter normalerweise durch Leerzeichen, Satzzeichen oder Zeilenumbrüche getrennt werden, stimmt b mit keinem dieser worttrennenden Zeichen überein, sondern nur mit einer Position.

Wenn Sie nach „Hi“ suchen, gefolgt von „Lucy“ in der Nähe, sollten Sie „bhib.*bLucyb“ verwenden.

Hier ist . ein weiteres Metazeichen, das mit jedem Zeichen außer Zeilenumbrüchen übereinstimmt. * ist ebenfalls ein Metazeichen, stellt jedoch weder ein Zeichen noch eine Position dar, sondern eine Menge – es gibt an, dass der Inhalt vor * beliebig oft wiederholt verwendet werden kann, um dem gesamten Ausdruck zu entsprechen. Daher bedeutet .* zusammen eine beliebige Anzahl von Zeichen, die keinen Zeilenumbruch enthalten. Nun ist die Bedeutung von bhib.*bLucyb offensichtlich: zuerst das Wort hi, dann eine beliebige Anzahl von Zeichen (aber keine Zeilenumbrüche) und schließlich das Wort Lucy.

Wenn andere Metazeichen zusammen verwendet werden, können wir leistungsfähigere reguläre Ausdrücke erstellen. Zum Beispiel das folgende Beispiel:

0dd-dddddddd entspricht einer Zeichenfolge, die mit 0 beginnt, dann zwei Ziffern, dann ein Bindestrich „-“ und schließlich 8 Ziffern (d. h. chinesische Telefonnummern). Natürlich , in diesem Beispiel kann nur die Vorwahl mit 3 Ziffern abgeglichen werden).

Das d hier ist ein neues Metazeichen, das einer einzelnen Ziffer entspricht (0, oder 1, oder 2, oder...). - ist kein Metazeichen, es entspricht nur sich selbst – dem Bindestrich (oder dem Minuszeichen oder dem Bindestrich oder wie auch immer Sie es nennen möchten).

Um so viele lästige Wiederholungen zu vermeiden, können wir diesen Ausdruck auch so schreiben: 0d{2}-d{8}. Das {2} ({8}) nach d bedeutet hier, dass das vorherige d 2 Mal (8 Mal) hintereinander wiederholt und abgeglichen werden muss.

Reguläre Ausdrücke testen

Wenn es Ihnen nicht schwerfällt, reguläre Ausdrücke zu lesen und zu schreiben, sind Sie entweder ein Genie oder nicht von der Erde. Die Syntax regulärer Ausdrücke kann selbst für Leute, die sie regelmäßig verwenden, verwirrend sein. Da das Lesen und Schreiben schwierig und fehleranfällig ist, muss ein Tool zum Testen regulärer Ausdrücke gefunden werden.

Einige Details regulärer Ausdrücke unterscheiden sich in verschiedenen Umgebungen. Dieses Tutorial stellt das Verhalten regulärer Ausdrücke unter Microsoft .Net Framework 4.5 vor. Daher empfehle ich Ihnen die .Net-Version, die ich geschrieben habe. Bitte beachten Sie die Anweisungen auf dieser Seite, um die Software zu installieren und auszuführen.

Das Folgende ist ein Screenshot der Ausführung von Regester:

Ein 30-minütiges Tutorial für Anfänger zu regulären Ausdrücken

Metazeichen

Jetzt kennen Sie ein paar nützliche Metazeichen, wie zum Beispiel b,. ,* und d. Es gibt weitere Metazeichen in regulären Ausdrücken. Beispielsweise entspricht s jedem Leerzeichen, einschließlich Leerzeichen, Tabulatoren, Zeilenumbrüchen, chinesischen Leerzeichen in voller Breite usw. w entspricht Buchstaben, Zahlen, Unterstrichen, chinesischen Schriftzeichen usw.

Hier sind einige weitere Beispiele:

baw*b findet Wörter, die mit dem Buchstaben a beginnen – zuerst der Anfang eines Wortes (b), dann der Buchstabe a, dann eine beliebige Anzahl von Buchstaben oder Zahlen (w*), gefolgt vom Ende des Wortes (b).

d+ entspricht einer oder mehreren aufeinanderfolgenden Zahlen. Das + ist hier ein dem * ähnliches Metazeichen. Der Unterschied besteht darin, dass * beliebig oft (möglicherweise 0 Mal) auf wiederholte Übereinstimmungen trifft, während + auf ein- oder mehrmalige Wiederholungen trifft.

bw{6}b findet Wörter mit genau 6 Zeichen.

Ein 30-minütiges Tutorial für Anfänger zu regulären Ausdrücken

Die Metazeichen ^ (das Symbol an der gleichen Schlüsselposition wie die Zahl 6) und $ stimmen beide mit einer Position überein, die in gewisser Weise b ähnelt. ^ entspricht dem Anfang der gesuchten Zeichenfolge und $ entspricht dem Ende. Diese beiden Codes sind sehr nützlich, wenn Sie den Eingabeinhalt überprüfen. Wenn eine Website beispielsweise erfordert, dass die von Ihnen eingegebene QQ-Nummer aus 5 bis 12 Ziffern bestehen muss, können Sie Folgendes verwenden: ^d{5,12}$.

Das {5,12} hier ähnelt dem zuvor eingeführten {2}, außer dass die {2}-Übereinstimmung nur zweimal wiederholt werden kann, nicht mehr und nicht weniger, und {5,12} wird wiederholt . Die Häufigkeit darf nicht weniger als 5 Mal und nicht mehr als 12 Mal betragen, sonst stimmen sie nicht überein.

Da ^ und $ verwendet werden, muss die gesamte Eingabezeichenfolge verwendet werden, um mit d{5,12} übereinzustimmen, was bedeutet, dass die gesamte Eingabe aus 5 bis 12 Zahlen bestehen muss, also wenn die Eingabe die QQ-Zahl ist Kann mit diesem regulären Ausdruck übereinstimmen, erfüllt er die Anforderungen.

Ähnlich wie die Option, die Groß-/Kleinschreibung zu ignorieren, verfügen einige Tools zur Verarbeitung regulärer Ausdrücke auch über die Option, mehrere Zeilen zu verarbeiten. Wenn diese Option ausgewählt ist, wird die Bedeutung von ^ und $ zum Anfang und Ende der übereinstimmenden Zeile.

Zeichen-Escapezeichen

Wenn Sie nach dem Metazeichen selbst suchen möchten, beispielsweise nach . oder *, gibt es ein Problem: Sie können diese nicht angeben, da sie interpretiert werden als etwas anderes. Zu diesem Zeitpunkt müssen Sie verwenden, um die besondere Bedeutung dieser Zeichen aufzuheben. Daher sollten Sie . und * verwenden. Um nach sich selbst zu suchen, müssen Sie natürlich auch \.

verwenden. Zum Beispiel: deerchao.net entspricht deerchao.net, C:\Windows entspricht C:Windows.

Wiederholen

Sie haben bereits die vorherigen Möglichkeiten zum Zuordnen und Wiederholen von *, +, {2}, {5,12} gesehen. Im Folgenden finden Sie alle Qualifikationsmerkmale in regulären Ausdrücken (Codes, die eine Zahl angeben, z. B. *, {5,12} usw.):

Ein 30-minütiges Tutorial für Anfänger zu regulären Ausdrücken

Hier sind einige Beispiele für die Verwendung Wiederholung:

Windowsd+ entspricht Windows gefolgt von einer oder mehreren Ziffern

^w+ entspricht dem ersten Wort einer Zeile (oder dem ersten Wort der gesamten Zeichenfolge; die spezifische Bedeutung des Abgleichs hängt davon ab). Option Einstellungen)

Zeichenklasse

Um Zahlen, Buchstaben oder Zahlen zu finden, ist Leerzeichen sehr einfach, da es bereits Metazeichen gibt, die diesen Zeichensätzen entsprechen, aber wenn Sie eine Übereinstimmung wünschen, gibt es keine Voreinstellungen -set Was sollte getan werden, um einen Zeichensatz von Metazeichen (wie die Vokale a, e, i, o, u) zu definieren?

Es ist ganz einfach, Sie müssen sie nur in eckigen Klammern auflisten, so wie [aeiou] auf jeden englischen Vokal passt, [.?!] auf Satzzeichen (. oder? oder!).

Wir können auch leicht einen Zeichenbereich angeben. Beispielsweise stellt [0-9] genau die gleiche Bedeutung wie d dar: Eine einzelne Ziffer ist ebenfalls völlig gleichwertig. in w (wenn nur Englisch berücksichtigt wird).

Lassen Sie uns das etwas analysieren: Zuerst gibt es ein Escape-Zeichen (, es kann 0 oder 1 Mal vorkommen (?), dann gibt es eine 0, gefolgt von 2 Zahlen (d{2}), dann eine von ) oder - oder ein Leerzeichen, das einmal vorkommt oder nicht (?), und schließlich 8 Zahlen (d{8}).

Verzweigungsbedingung

Leider kann der Ausdruck gerade auch mit „falschen“ Formaten wie 010)12345678 oder (022-87654321) übereinstimmen. Um dieses Problem zu lösen, müssen wir Verzweigungsbedingungen festlegen Die Verzweigungsbedingungen in regulären Ausdrücken beziehen sich auf mehrere Regeln. Die spezifische Methode besteht darin, verschiedene Regeln zu trennen Egal, schauen Sie sich das Beispiel an:

0d{2}-d{8}|0d{3}-d{7} Dieser Ausdruck kann mit zwei durch Bindestriche getrennten Telefonnummern übereinstimmen: Eine davon ist ein dreistelliger Bereich Vorwahl, 8-stellige Ortsnummer (z. B. 010-12345678), eine davon ist eine 4-stellige Ortsvorwahl, 7-stellige Ortsnummer (0376-2233445)

(0d{2})[- ]?d {8 }|0d{2}[- ]?d{8} Dieser Ausdruck entspricht einer Telefonnummer mit einer dreistelligen Ortsvorwahl. Die Ortsvorwahl kann in Klammern stehen oder nicht durch einen Bindestrich oder ein Leerzeichen getrennt, oder es gibt kein Intervall. Sie können versuchen, diesen Ausdruck zu erweitern, um auch 4-stellige Vorwahlen zu unterstützen {4}|d{5} Für den Abgleich von Postleitzahlen in den Vereinigten Staaten gelten 5 Ziffern bzw. 9 durch Bindestriche getrennte Ziffern Problem: Achten Sie bei der Verwendung von Zweigbedingungen auf die Reihenfolge der Bedingungen. Wenn Sie sie in d{5}|d{5}-d{4} ändern, wird nur die 5-stellige Postleitzahl (und die erste) angegeben Bei der Verzweigung wird jede Bedingung von links nach rechts geprüft, andere Bedingungen werden nicht berücksichtigt einzelnes Zeichen (fügen Sie einfach das Qualifikationsmerkmal nach dem Zeichen hinzu); aber was ist, wenn Sie mehrere Zeichen wiederholen möchten? Sie können Unterausdrücke mithilfe von Klammern angeben (auch als Gruppierung bezeichnet) und dann die Anzahl der Wiederholungen dieses Unterausdrucks angeben kann auch andere Operationen für den Unterausdruck ausführen (wird später vorgestellt).

(d{1,3}.){3}d{1,3} ist ein einfacher Ausdruck für den IP-Adressabgleich. Um diesen Ausdruck zu verstehen, analysieren Sie ihn in der folgenden Reihenfolge: d{1,3} entspricht einer Zahl mit 1 bis 3 Ziffern, (d{1,3}.){3} entspricht einer dreistelligen Zahl plus einem Punkt (this Das Ganze ist diese Gruppe) wird dreimal wiederholt und schließlich wird eine ein- bis dreistellige Zahl (d{1,3}) hinzugefügt.

Leider wird auch die unmögliche IP-Adresse 256.300.888.999 gefunden. Wenn Sie einen arithmetischen Vergleich verwenden können, können Sie dieses Problem möglicherweise einfach lösen, aber reguläre Ausdrücke stellen keine mathematischen Funktionen bereit, sodass Sie nur umfangreiche Gruppierungs-, Auswahl- und Zeichenklassen verwenden können, um eine korrekte IP-Adresse zu beschreiben:( (2 [0-4]d|25[0-5]|[01]?dd?).){3}(2[0-4]d|25[0-5]|[01]?dd? ).

Der Schlüssel zum Verständnis dieses Ausdrucks liegt darin, 2[0-4]d|25[0-5]|[01]?dd? zu verstehen. Sie sollten dazu in der Lage sein um es selbst zu analysieren.

Antonyme

Manchmal ist es notwendig, Zeichen zu finden, die nicht zu einer einfach zu definierenden Zeichenklasse gehören. Wenn Sie beispielsweise ein anderes Zeichen als Zahlen finden möchten, müssen Sie das Antonym verwenden:

Ein 30-minütiges Tutorial für Anfänger zu regulären Ausdrücken

Beispiel: S+ entspricht einer Zeichenfolge, die keine Leerzeichen enthält.

]+> entspricht einer Zeichenfolge, die mit einem in spitzen Klammern beginnt.

Rückverweis

Nachdem Sie einen Unterausdruck in Klammern angegeben haben, kann der zu diesem Unterausdruck passende Text (d. h. der von dieser Gruppe erfasste Inhalt) in Ausdrücken oder anderen Programmen zur weiteren Verarbeitung verwendet werden. Standardmäßig hat jede Gruppe automatisch eine Gruppennummer. Die Regel lautet: Von links nach rechts, mit der linken Klammer der Gruppe als Markierung, ist die Gruppennummer der ersten erscheinenden Gruppe 1, die zweite ist 2 und so weiter.

Rückwärtsreferenz wird verwendet, um wiederholt nach Text zu suchen, der zu einer vorherigen Gruppe passt. Beispielsweise stellt 1 den Text dar, der mit Gruppe 1 übereinstimmt. Schwer zu verstehen? Bitte sehen Sie sich das Beispiel an:

b(w+)bs+1b kann verwendet werden, um wiederholte Wörter wie „go go“ oder „kitty kitty“ zuzuordnen. Dieser Ausdruck ist zunächst ein Wort, das heißt mehr als ein Buchstabe oder eine Zahl (b(w+)b) zwischen dem Anfang und dem Ende des Wortes. Dieses Wort wird in der Gruppe mit der Nummer 1 und dann 1 erfasst. Ein oder mehrere Leerzeichen Zeichen (s+) und schließlich der in Gruppe 1 erfasste Inhalt (d. h. das zuvor übereinstimmende Wort) (1).

Sie können den Gruppennamen des Unterausdrucks auch selbst angeben. Um den Gruppennamen eines Unterausdrucks anzugeben, verwenden Sie bitte die folgende Syntax: (?w+) (oder ersetzen Sie die spitzen Klammern durch ': (?'Word'w+)), sodass der Gruppenname von w+ Der Name ist wird als Wort bezeichnet. Um auf den von dieser Gruppe erfassten Inhalt zurückzuverweisen, können Sie k verwenden. Das vorherige Beispiel könnte also auch so geschrieben werden: b(?w+)bs+kb.

Bei der Verwendung von Klammern gibt es viele spezielle Syntaxen. Hier sind einige der am häufigsten verwendeten:

Ein 30-minütiges Tutorial für Anfänger zu regulären Ausdrücken

Zero-Breite-Behauptungen

Die nächsten vier werden verwendet, um herauszufinden, wann etwas (aber nicht dieser Inhalt) ist. davor oder danach, das heißt, sie werden wie b,^,$ verwendet, um eine Position anzugeben, die bestimmte Bedingungen (d. h. Behauptungen) erfüllen soll, daher werden sie auch Behauptungen mit der Breite Null genannt. Verwenden Sie zur Veranschaulichung am besten ein Beispiel:

(?=exp) wird auch als positive Vorhersage-Lookahead-Behauptung mit Nullbreite bezeichnet. Sie besagt, dass der Ausdruck exp nach der Position, an der er erscheint, abgeglichen werden kann. Beispielsweise entspricht bw+(?=ingb) dem vorderen Teil eines Wortes, das mit ing endet (außer ing).

(?

Wenn Sie in einer sehr langen Zahl zwischen jeweils drei Ziffern ein Komma einfügen möchten (natürlich von rechts hinzugefügt), finden Sie den Teil, in dem Sie Kommas vorne und innen einfügen müssen, wie folgt: ((( ?

Das folgende Beispiel verwendet beide Behauptungen: (?

Negative Nullbreitenbehauptung

Wir haben bereits erwähnt, wie man Zeichen findet, die kein bestimmtes Zeichen sind oder nicht zu einer bestimmten Zeichenklasse (Antonym) gehören. Aber was ist, wenn wir nur sicherstellen wollen, dass ein bestimmtes Zeichen nicht erscheint, es aber nicht mit ihm übereinstimmen soll? Wenn wir beispielsweise ein Wort finden möchten, in dem der Buchstabe q vorkommt, dem q aber nicht der Buchstabe u folgt, können wir Folgendes versuchen:

\b\w*q[^u]\w*\b匹配包含后面不是字母u的字母q的单词。但是如果多做测试(或者你思维足够敏锐,直接就观察出来了),你会发现,如果q出现在单词的结尾的话,像Iraq,Benq,这个表达式就会出错。这是因为[^u]总要匹配一个字符,所以如果q是单词的最后一个字符的话,后面的[^u]将会匹配q后面的单词分隔符(可能是空格,或者是句号或其它的什么),后面的\w*\b将会匹配下一个单词,于是\b\w*q[^u]\w*\b就能匹配整个Iraq fighting。负向零宽断言能解决这样的问题,因为它只匹配一个位置,并不消费任何字符。现在,我们可以这样来解决这个问题:\b\w*q(?!u)\w*\b。

零宽度负预测先行断言(?!exp),断言此位置的后面不能匹配表达式exp。例如:\d{3}(?!\d)匹配三位数字,而且这三位数字的后面不能是数字;\b((?!abc)\w)+\b匹配不包含连续字符串abc的单词。

同理,我们可以用(?

一个更复杂的例子:(?).*(?=)匹配不包含属性的简单HTML标签内里的内容。(?)指定了这样的前缀:被尖括号括起来的单词(比如可能是),然后是.*(任意的字符串),最后是一个后缀(?=)。注意后缀里的\/,它用到了前面提过的字符转义;\1则是一个反向引用,引用的正是捕获的第一组,前面的(\w+)匹配的内容,这样如果前缀实际上是的话,后缀就是了。整个表达式匹配的是之间的内容(再次提醒,不包括前缀和后缀本身)。

注释

小括号的另一种用途是通过语法(?#comment)来包含注释。例如:2[0-4]\d(?#200-249)|25[0-5](?#250-255)|[01]?\d\d?(?#0-199)。

要包含注释的话,最好是启用“忽略模式里的空白符”选项,这样在编写表达式时能任意的添加空格,Tab,换行,而实际使用时这些都将被忽略。启用这个选项后,在#后面到这一行结束的所有文本都将被当成注释忽略掉。例如,我们可以前面的一个表达式写成这样:

(?<=    # 断言要匹配的文本的前缀
      <(\w+)> # 查找尖括号括起来的字母或数字(即HTML/XML标签)
      )       # 前缀结束
      .*      # 匹配任意文本
      (?=     # 断言要匹配的文本的后缀
      <\/\1>  # 查找尖括号括起来的内容:前面是一个"/",后面是先前捕获的标签
      )       # 后缀结束

贪婪与懒惰

当正则表达式中包含能接受重复的限定符时,通常的行为是(在使整个表达式能得到匹配的前提下)匹配尽可能多的字符。以这个表达式为例:a.*b,它将会匹配最长的以a开始,以b结束的字符串。如果用它来搜索aabab的话,它会匹配整个字符串aabab。这被称为贪婪匹配。

有时,我们更需要懒惰匹配,也就是匹配尽可能少的字符。前面给出的限定符都可以被转化为懒惰匹配模式,只要在它后面加上一个问号?。这样.*?就意味着匹配任意数量的重复,但是在能使整个匹配成功的前提下使用最少的重复。现在看看懒惰版的例子吧:

a.*?b匹配最短的,以a开始,以b结束的字符串。如果把它应用于aabab的话,它会匹配aab(第一到第三个字符)和ab(第四到第五个字符)。

Ein 30-minütiges Tutorial für Anfänger zu regulären Ausdrücken

处理选项

上面介绍了几个选项如忽略大小写,处理多行等,这些选项能用来改变处理正则表达式的方式。下面是.Net中常用的正则表达式选项:

Ein 30-minütiges Tutorial für Anfänger zu regulären Ausdrücken

一个经常被问到的问题是:是不是只能同时使用多行模式和单行模式中的一种?答案是:不是。这两个选项之间没有任何关系,除了它们的名字比较相似(以至于让人感到疑惑)以外。

平衡组/递归匹配

有时我们需要匹配像( 100 * ( 50 + 15 ) )这样的可嵌套的层次性结构,这时简单地使用\(.+\)则只会匹配到最左边的左括号和最右边的右括号之间的内容(这里我们讨论的是贪婪模式,懒惰模式也有下面的问题)。假如原来的字符串里的左括号和右括号出现的次数不相等,比如( 5 / ( 3 + 2 ) ) ),那我们的匹配结果里两者的个数也不会相等。有没有办法在这样的字符串里匹配到最长的,配对的括号之间的内容呢?

为了避免(和\(把你的大脑彻底搞糊涂,我们还是用尖括号代替圆括号吧。现在我们的问题变成了如何把xx aa> yy这样的字符串里,最长的配对的尖括号内的内容捕获出来?

这里需要用到以下的语法构造:

(?'group') 把捕获的内容命名为group,并压入堆栈(Stack)

(?'-group') 从堆栈上弹出最后压入堆栈的名为group的捕获内容,如果堆栈本来为空,则本分组的匹配失败

(?(group)yes|no) 如果堆栈上存在以名为group的捕获内容的话,继续匹配yes部分的表达式,否则继续匹配no部分

(?!) 零宽负向先行断言,由于没有后缀表达式,试图匹配总是失败

我们需要做的是每碰到了左括号,就在压入一个"Open",每碰到一个右括号,就弹出一个,到了最后就看看堆栈是否为空--如果不为空那就证明左括号比右括号多,那匹配就应该失败。正则表达式引擎会进行回溯(放弃最前面或最后面的一些字符),尽量使整个表达式得到匹配。

<                         #最外层的左括号
    [^<>]*                #最外层的左括号后面的不是括号的内容
    (
        (
            (?&#39;Open&#39;<)    #碰到了左括号,在黑板上写一个"Open"
            [^<>]*       #匹配左括号后面的不是括号的内容
        )+
        (
            (?&#39;-Open&#39;>)   #碰到了右括号,擦掉一个"Open"
            [^<>]*        #匹配右括号后面不是括号的内容
        )+
    )*
    (?(Open)(?!))         #在遇到最外层的右括号前面,判断黑板上还有没有没擦掉的"Open";如果还有,则匹配失败
>                         #最外层的右括号

平衡组的一个最常见的应用就是匹配HTML,下面这个例子可以匹配嵌套的

标签:
]*>[^]*(((?'Open'
]*>)[^]*)+((?'-Open'
)[^]*)+)*(?(Open)(?!))
.

上边已经描述了构造正则表达式的大量元素,但是还有很多没有提到的东西。下面是一些未提到的元素的列表,包含语法和简单的说明。你可以在网上找到更详细的参考资料来学习它们--当你需要用到它们的时候。如果你安装了MSDN Library,你也可以在里面找到.net下正则表达式详细的文档。

Ein 30-minütiges Tutorial für Anfänger zu regulären Ausdrücken

Das obige ist der detaillierte Inhalt vonEin 30-minütiges Tutorial für Anfänger zu regulären Ausdrücken. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

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