Manchmal weiß ich nicht, wie viele Charaktere zu passen. Um sich an diese Unsicherheit anzupassen, unterstützen regelmäßige Ausdrücke das Konzept der Qualifikation. Diese Qualifizierer können angeben, wie oft eine bestimmte Komponente eines regulären Ausdrucks erscheinen muss, bevor die Übereinstimmung erfüllt werden kann.
Die folgende Tabelle gibt eine Erklärung der verschiedenen Qualifikationsspiele und ihrer Bedeutungen:
| Charakter | beschreiben |
|---|---|
| * | Entspricht dem vorherigen Subtonpression Null oder mehrmals. Zum Beispiel kann Zo* Z und Zoo übereinstimmen. * ist äquivalent zu {0,}. |
| + | Entspricht dem vorherigen Subton -Druck einmal oder mehrmals. Zum Beispiel kann 'ZO+' ZO und Zoo übereinstimmen, aber nicht z. + ist äquivalent zu {1,}. |
| ? | Entspricht dem vorherigen Subtonpression Null oder einmal. Zum Beispiel (e)? ? Ist {0,1} gleichwertig. |
| { N } | N ist eine nicht negative Ganzzahl. Übereinstimmen die n -mal, die bestimmt werden. Zum Beispiel kann 'O {2}' in Bob nicht mit 'o' übereinstimmen, kann aber zwei Betriebssysteme in Lebensmitteln mithalten. |
| { N ,} | N ist eine nicht negative Ganzzahl. Mindestens n -mal passen. Zum Beispiel kann 'O {2,}' in Bob nicht mit 'O' übereinstimmen, kann aber mit allen Betriebssystemen in foooood übereinstimmen. 'o {1,}' entspricht 'o+'. 'o {0,}' entspricht 'o*'. |
| { n , m } | Sowohl m als auch n sind nicht negative ganze Zahlen, wobei n <= m . Passen Sie mindestens n -mal an und passen Sie bis zu M -Zeiten überein. Liu, o {1,3} wird mit den ersten drei Betriebssystemen in fooooood übereinstimmen. 'o {0,1}' entspricht 'o?'. Bitte beachten Sie, dass zwischen Kommas und zwei Zahlen keine Räume geben können. |
Für ein großes Eingabedokument kann die Anzahl der Kapitel leicht neun Kapitel überschreiten. Daher gibt es eine Möglichkeit, mit zweistelligen oder dreistelligen Kapitelnummern umzugehen. Der Qualifikationsmerkmal bietet diese Funktion. Der folgende reguläre Ausdruck von Jscript kann mit einer beliebigen Anzahl von Bits mit dem Kapitel -Titel übereinstimmen:
/Chapter [1-9][0-9]*/Der folgende reguläre Ausdruck von VBScript führt die gleiche Übereinstimmung durch:
Chapter [1-9][0-9]*Beachten Sie, dass die Qualifikation nach dem Reichweiteausdruck erscheinen. Daher wird es auf den gesamten enthaltenen Bereich angewendet, in diesem Fall werden nur Zahlen von 0 bis 9 angegeben.
Das Qualifikationsmerkmal von '+' wird hier nicht verwendet, da eine Zahl in der zweiten oder nachfolgenden Position nicht unbedingt erforderlich ist. Auch nein '?' Der Charakter wird verwendet, da dies die Anzahl der Kapitel auf nur zwei Ziffern einschränken wird. Mindestens eine Nummer sollte nach dem 'Kapitel' und den Space -Charakteren übereinstimmen.
Wenn bekannt ist, dass das Kapitelgrenze 99 Kapitel beträgt, können Sie den folgenden JScript -Ausdruck verwenden, um mindestens eine Zahl anzugeben, jedoch nicht mehr als zwei Zahlen.
/Chapter [0-9]{1,2}/Für VBScript können die folgenden regulären Ausdrücke verwendet werden:
Chapter [0-9]{1,2}Der Nachteil des obigen Ausdrucks ist, dass bei einer Kapitelnummer von mehr als 99 noch nur die ersten beiden Ziffern übereinstimmt. Ein weiterer Nachteil ist, dass einige Leute ein Kapitel 0 erstellen und immer noch übereinstimmen können. Ein besserer Jscript -Ausdruck, der mit einer zweistelligen Zahl entspricht, lautet wie folgt:
/Chapter [1-9][0-9]?/oder
/Chapter [1-9][0-9]{0,1}/Für VBScript entspricht der folgende Ausdruck dem oben genannten:
Chapter [1-9][0-9]?oder
Chapter [1-9][0-9]{0,1} Das ' * ' , ' +' und ' ?' Manchmal ist dies nicht das, was Sie überhaupt passieren möchten. Manchmal ist es einfach das kleinste Match.
Sie möchten beispielsweise nach einem HTML -Dokument suchen, um einen Kapitel -Titel zu finden, der im H1 -Tag enthalten ist. In einem Dokument kann der Text das folgende Formular haben:
<H1>Chapter 1 – Introduction to Regular Expressions</H1>Der folgende Ausdruck entspricht von Anfang an weniger als Zeichen (<) bis zum Ende des H1 -Markers.
/<.*>/Der reguläre Ausdruck von VBScript ist:
<.*>Wenn das Starth1-Tag übereinstimmt, passt die folgenden nicht greedischen Ausdrücke nur mit <H1> zusammen.
/<.*?>/oder
<.*?>Durch platzieren "?"
Bisher sollten die Beispiele nur in Betracht ziehen, Kapiteltitel zu finden, die überall erscheinen. Jedes Zeichenfolgenkapitel, das von einem Raum und einer Nummer erscheint, kann ein echter Kapitel -Titel oder ein Querverweis auf andere Kapitel sein. Da der tatsächliche Kapitel -Titel immer zu Beginn einer Zeile erscheint, ist es erforderlich, eine Methode zu entwerfen, um nur nach dem Titel und nicht nach der Kreuzreferenz zu suchen.
Locators bieten diese Funktion. Ein Locator kann einen regulären Ausdruck am Anfang oder am Ende einer Linie beheben. Sie können auch reguläre Ausdrücke erstellen, die nur in Wörtern oder nur am Anfang oder am Ende eines Wortes erscheinen. Die folgende Tabelle enthält eine Liste regulärer Ausdrücke und deren Bedeutungen:
| Charakter | beschreiben |
|---|---|
| ^ | Entspricht der Startposition der Eingabezeichenfolge. Wenn die Multiline -Eigenschaft des Regexp -Objekts festgelegt ist, stimmt ^ auch mit der Position nach '/n' oder '/r' überein. |
| $ | Entspricht der Endposition der Eingangszeichenfolge. Wenn die Multiline -Eigenschaft des Regexp -Objekts festgelegt ist, stimmt $ auch mit der Position vor '/n' oder '/r' überein. |
| /B | Stimmen Sie eine Wortgrenze an, was die Position zwischen Wort und Raum bedeutet. |
| /B | Übereinstimmung mit Nicht-Wort-Grenzen. |
Qualifizierer können nicht für Locators verwendet werden. Da es vor oder nach einer neuen Linie oder einer Wortgrenze keine aufeinanderfolgenden Positionen geben wird, sind Ausdrücke wie '^*' nicht zulässig.
Verwenden Sie den Text zu Beginn einer Textzeile zu Beginn des regulären Ausdrucks. Verwechseln Sie diese Syntax von '^' nicht mit seiner Syntax in Klammern. Ihre Syntax ist grundsätzlich anders.
Verwenden Sie am Ende des regulären Ausdrucks das Zeichen "$", um den Text am Ende einer Textzeile zu entsprechen.
Um einen Locator bei der Suche nach Kapitel -Titeln zu verwenden, entspricht der folgende reguläre Ausdruck von Jscript mit einem Kapitel -Titel mit bis zu zwei Zahlen zu Beginn einer Zeile:
/^Chapter [1-9][0-9]{0,1}/Regelmäßige Ausdrücke für dieselbe Funktion in VBScript sind wie folgt:
^Chapter [1-9][0-9]{0,1}Ein echter Kapitel -Titel erscheint nicht nur am Anfang einer Zeile, sondern hat auch nur diesen Inhalt in dieser Zeile, daher muss er auch am Ende einer Zeile sein. Der folgende Ausdruck stellt sicher, dass die angegebene Übereinstimmung nur mit dem Kapitel übereinstimmt und nicht mit Kreuzreferenzen übereinstimmt. Es wird erreicht, indem ein regulärer Ausdruck erstellt wird, der nur den Anfangs- und Endpositionen einer literalen Linie übereinstimmt.
/^Chapter [1-9][0-9]{0,1}$/Verwenden Sie für VBScript:
^Chapter [1-9][0-9]{0,1}___FCKpd___16quot;Die passenden Wortgrenzen sind geringfügig unterschiedlich, fügt den regulären Ausdrücken jedoch eine sehr wichtige Funktion hinzu. Die Wortgrenze ist die Position zwischen dem Wort und dem Raum. Non-Word-Grenzen sind irgendwo anders. Der folgende Jscript -Ausdruck entspricht den ersten drei Zeichen des Wortes 'Kapitel', weil sie nach der Wortgrenze erscheinen:
//bCha/Für VBScript:
/bChaDie Position des '/B' -Operators ist hier von entscheidender Bedeutung. Wenn es zu Beginn der Zeichenfolge ist, wird ein Match am Anfang des Wortes gesucht; Zum Beispiel entspricht der folgende Ausdruck "ter" im Wort "Kapitel", da es vor der Wortgrenze erscheint:
/ter/b/sowie
ter/bDer folgende Ausdruck stimmt mit 'passender' überein, weil er sich in der Mitte des Kapitels befindet, aber in 'Eignung' nicht mit 'passend' übereinstimmt:
//Bapt/sowie
/BaptDies liegt daran, dass "passend" in der nicht Wortgrenze in dem Wort "Kapitel" und in dem Wort "Eignung" erscheint. Die Position der Nicht-Wort-Grenzbetreiber ist nicht wichtig, da das Spiel nichts mit dem Beginn oder Ende eines Wortes zu tun hat.