Quantifizierer in JScript
Aktualisiert: November 2007
Wenn Sie die Anzahl der Zeichen, die eine Entsprechung ausmachen, nicht angeben können, verwenden Sie für reguläre Ausdrücke so genannte Quantifizierer. Mit Quantifizierern können Sie angeben, wie viele Male eine bestimmte Komponente eines regulären Ausdrucks vorkommen muss, damit eine gefundene Zeichenfolge als Entsprechung gilt.
Bedeutung von Quantifizierern
Zeichen |
Beschreibung |
---|---|
* |
Entspricht dem vorherigen Zeichen oder Teilausdruck null oder mehrere Male. Beispiel: 'zo*' entspricht den Zeichenfolgen "z" und "zoo". * ist gleichbedeutend mit {0,}. |
+ |
Entspricht dem vorherigen Zeichen oder Teilausdruck einmal oder mehrere Male. Beispiel: 'zo+' entspricht den Zeichenfolgen "zo" und "zoo", jedoch nicht "z". + ist gleichbedeutend mit {1,}. |
? |
Entspricht dem vorherigen Zeichen oder Teilausdruck null‑ oder einmal. Beispiel: 'do(es)?' entspricht der Zeichenfolge "do" in "do" oder "does". ? ? ist gleichbedeutend mit {0,1}. |
{n} |
n ist eine nicht negative ganze Zahl. Entspricht genau n‑mal dem Zeichen. Beispielsweise entspricht 'o{2}' nicht dem 'o' in "Bob", jedoch den zwei o's in "food". |
{n,} |
n ist eine nicht negative ganze Zahl. Entspricht mindestens n‑mal dem Zeichen. Beispielsweise entspricht 'o{2,}' nicht dem 'o' in "Bob", jedoch allen o's in "foooood". o{1,} ist gleichbedeutend mit o+. o{0,} ist gleichbedeutend mit o*. |
{n,m} |
m und n sind nicht negative ganze Zahlen, wobei n < = m ist. Entspricht dem Zeichen mindestens n-mal und höchstens m-mal. Beispielsweise entspricht 'o{1,3}' den ersten drei o's in "fooooood". o{0,1} ist gleichbedeutend mit o?. Beachten Sie, dass Sie zwischen das Komma und die Zahlen kein Leerzeichen setzen dürfen. |
Da Kapitelnummern in einem großen Dokument die Nummer 9 leicht übersteigen können, brauchen Sie eine Möglichkeit, zwei- oder dreistellige Kapitelnummern zu verarbeiten. Hierzu verwenden Sie Quantifizierer. Der folgende reguläre Ausdruck entspricht Kapitelnummern mit beliebig vielen Stellen:
/Chapter [1-9][0-9]*/
Beachten Sie, dass der Quantifizierer nach dem Bereichsausdruck auftritt. Daher gilt er für den gesamten Bereichsausdruck, der in diesem Fall nur Ziffern von 0 bis einschließlich 9 angibt.
Der +-Quantifizierer wird hier nicht verwendet, da an der zweiten oder nachfolgenden Position nicht unbedingt eine Ziffer vorhanden sein muss. Das ?-Zeichen wird ebenfalls nicht verwendet, da es die Kapitelnummern auf zwei Stellen begrenzen würde. Sie möchten Entsprechungen für mindestens eine Stelle hinter "Chapter" und einem Leerzeichen finden.
Wenn Sie wissen, dass die Kapitelnummern maximal 99 erreichen können, können Sie anhand des folgenden Ausdrucks mindestens eine, jedoch höchstens zwei Stellen angeben.
/Chapter [0-9]{1,2}/
Der Nachteil des obigen Ausdrucks ist, dass auch für eine Kapitelnummer größer als 99 nur die Entsprechung für die ersten beiden Stellen gesucht wird. Ein weiterer Nachteil liegt darin, dass auch Chapter 0 eine Entsprechung wäre. Folgende Ausdrücke sind daher für die Suche nach nur zwei entsprechenden Stellen besser geeignet:
/Chapter [1-9][0-9]?/
oder
/Chapter [1-9][0-9]{0,1}/
Die Quantifizierer *, + und ? werden als gierig bezeichnet, weil sie nach Entsprechungen von so viel Text wie möglich suchen. In manchen Fällen benötigen Sie jedoch nur eine minimale Entsprechung.
Sie suchen z. B. in einem HTML-Dokument nach einem Vorkommen einer Kapitelüberschrift, die in ein H1-Tag eingebettet ist. Dieser Text kommt im Dokument wie folgt vor:
<H1>Chapter 1 – Introduction to Regular Expressions</H1>
Der folgende Ausdruck sucht nach Entsprechungen für alles vom öffnenden Kleiner-als-Symbol (<) bis zum Größer-als-Symbol (>), das das H1-Tag abschließt.
/<.*>/
Wenn nur eine Entsprechung für das öffnende H1‑Tag gesucht werden soll, entspricht der folgende nicht gierige Ausdruck ausschließlich <H1>.
/<.*?>/
Durch Platzieren des ? nach einem Quantifizierer *, + oder ? wird der Ausdruck von einer gierigen in eine nicht gierige oder minimale Entsprechung umgewandelt.