Reguläre Ausdrücke (RegEx) - Kurzübersicht

Inhaltsverzeichnis

Grundlagen

Übereinstimmung überall finden: Standardmäßig findet ein regulärer Ausdruck eine Übereinstimmung an einer beliebigen Stelle innerhalb der zu durchsuchenden Zeichenkette. Zum Beispiel wird der reguläre Ausdruck abc in abc123, 123abc und 123abcxyz gefunden. Wenn eine Übereinstimmung nur am Anfang oder Ende einer Zeichenkette gefunden werden soll, verwenden Sie einen Anker.

Escapezeichenversehene Zeichen: Die meisten Zeichen wie abc123 können ganz normal in einem regulären Ausdruck verwendet werden. Anders verhält es sich mit den Metazeichen \.*?+[{|()^$: Um ihre spezielle Bedeutung außer Kraft zu setzen, muss ihnen ein umgekehrter Schrägstrich vorangestellt werden. Zum Beispiel ist \. ein normaler Punkt und \\ ein normaler umgekehrter Schrägstrich. Um nicht nur ein Zeichen, sondern eine ganze Reihe von Zeichen als normale Zeichen zu behandeln, verwenden Sie \Q...\E. Zum Beispiel: \QNormaler Text\E.

Groß-/Kleinschreibung-sensitiv: Standardmäßig sind reguläre Ausdrücke Groß-/Kleinschreibung-sensitiv (d.h. sie berücksichtigen die Groß-/Kleinschreibung). Mit der "i"-Option kann das geändert werden. Zum Beispiel sucht das Muster i)abc nach "abc", ohne die Groß-/Kleinschreibung zu berücksichtigen. Weitere Optionen finden Sie in der unteren Tabelle.

Optionen (Groß-/Kleinschreibung-sensitiv)

Geben Sie ganz am Anfang eines regulären Ausdrucks beliebig viele der folgenden Optionen an, gefolgt von einer schließenden runden Klammer. Zum Beispiel sucht das Muster im)abc nach "abc" mit den Optionen "nicht-Groß-/Kleinschreibung-sensitiv" und "mehrzeilig" (die runde Klammer kann weggelassen werden, wenn keine Optionen vorhanden sind). Diese Art der Optionsangabe hat gegenüber den herkömmlichen Methoden den Vorteil, dass keine speziellen Trennzeichen (wie z.B. Schrägstrich) benötigt werden und diese daher nicht mit einem Escapezeichen innerhalb des Suchmusters versehen werden müssen. Außerdem können die Optionen auf diese Weise einfacher geparst werden, was sich positiv auf die Performanz auswirkt.

Option Beschreibung
i Nicht-Groß-/Kleinschreibung-sensitive Übereinstimmung. Diese Option bewirkt, dass die Großbuchstaben A bis Z und die entsprechenden Kleinbuchstaben als identisch behandelt werden.
m

Multiline-Modus. Heuhaufen wird als eine Sammlung von einzelnen Zeilen betrachtet (sofern Zeilenumbrüche enthalten sind), nicht als eine durchgehende Zeile. Die folgenden Änderungen treten dabei in Kraft:

1) Zirkumflex (^) findet eine Übereinstimmung nach jedem Zeilenumbruch und am Anfang von Heuhaufen (aber nicht nach einem Zeilenumbruch ganz am Ende von Heuhaufen).

2) Dollarzeichen ($) findet eine Übereinstimmung vor jedem Zeilenumbruch (und ganz am Ende von Heuhaufen).

Zum Beispiel findet das Suchmuster m)^abc$ eine Übereinstimmung in xyz`r`nabc. Ohne die "m"-Option wäre dies nicht der Fall.

Die "D"-Option wird ignoriert, wenn die "m"-Option vorhanden ist.

s DotAll-Modus. Bewirkt, dass ein Punkt (.) alle Arten von Zeichen findet, inklusive Zeilenumbrüche (normalerweise findet der Punkt keine Zeilenumbrüche). Es sind jedoch zwei Punkte erforderlich, um ein Wagenrücklauf-Zeilenvorschub-Paar (`r`n) zu finden. Unabhängiger von dieser Option findet eine negative Klasse wie [^a] immer Zeilenumbrüche.
x Bewirkt, dass alle Leerraumzeichen im Suchmuster ignoriert werden, es sei denn, sie sind mit einem Escapezeichen versehen oder befinden sich in einer Zeichenklasse. Die Zeichen `n und `t werden ignoriert, da sie, sobald sie PCRE erreichen, bereits rohe/normale Leerraumzeichen sind (\n und \t werden hingegen nicht ignoriert, da sie PCRE-Escapesequenzen sind). Die "x"-Option ignoriert außerdem Zeichenketten (außerhalb einer Zeichenklasse), die mit einer escapezeichenlosen Raute (#) beginnen und mit einem Zeilenumbruch enden. Dies macht es möglich, Kommentare in ein komplexes Suchmuster einzufügen. Beachten Sie aber, dass dies nur für Datenzeichen gilt; spezielle Zeichensequenzen, wie z.B. (?(, das ein bedingtes Teilsuchmuster einleitet, dürfen keine Leerraumzeichen enthalten.
A Erzwingt eine Verankerung des Suchmusters, d.h. das Suchmuster kann nur am Anfang von Heuhaufen gefunden werden. Diese Option ist prinzipiell dasselbe wie, als würde man das Suchmuster explizit mit "^" verankern.
D Zwingt das Dollarzeichen ($), eine Übereinstimmung ganz am Ende von Heuhaufen zu finden, auch dann, wenn das letzte Element von Heuhaufen ein Zeilenumbruch ist. Wenn diese Option nicht vorhanden ist, findet $ eine Übereinstimmung direkt vor dem letzten Zeilenumbruch (falls vorhanden). Hinweis: Diese Option wird ignoriert, wenn die "m"-Option vorhanden ist.
J Erlaubt mehrere benannte Teilsuchmuster mit demselben Namen. Diese Option kann für Suchmuster nützlich sein, bei denen nur eines aus einer Sammlung von gleichnamigen Teilsuchmustern übereinstimmen kann. Hinweis: Wenn mehr als eine Instanz eines bestimmten Namens übereinstimmt, wird nur die ganz links gespeichert. Außerdem sind Variablennamen nicht Groß-/Kleinschreibung-sensitiv.
U Ungreedy-Modus. Bringt die Quantoren *, ?, + und {min,max} dazu, so wenig Zeichen wie möglich zu verbrauchen, um eine Übereinstimmung zu erzeugen, und überlässt die verbleibenden Zeichen dem nächsten Teil des Suchmusters. Wenn die "U"-Option nicht aktiv ist, kann ein einzelner Quantor durch Anfügen eines Fragezeichens ungreedy gemacht werden. Bei aktivierter "U"-Option bewirkt das Fragezeichen genau das Gegenteil - es macht einen einzelnen Quantor greedy.
X PCRE_EXTRA. Aktiviert PCRE-Features, die mit Perl inkompatibel sind. Zur Zeit gibt es nur ein solches Feature - es bewirkt, dass jeder umgekehrte Schrägstrich, gefolgt von einem Buchstaben ohne spezielle Funktion, die Übereinstimmung fehlschlagen lässt und ErrorLevel entsprechend setzt. Diese Option hilft, ungenutzte PCRE-Escapesequenzen für zukünftige Zwecke zu reservieren. Ohne diese Option wird der umgekehrte Schrägstrich vor einem Buchstaben ohne spezielle Funktion einfach ignoriert (z.B. werden sowohl \g als auch g als normales g erkannt). Unabhängiger von dieser Option werden umgekehrte Schrägstriche vor nicht-alphabetischen Zeichen ohne spezielle Funktion immer ignoriert (z.B. werden sowohl \/ als auch / als normaler Schrägstrich erkannt).
P Positionsmodus. Bewirkt, dass RegExMatch() die Position und Länge der Übereinstimmung und ihrer Teilsuchmuster zurückgibt, nicht deren gefundene Teilzeichenketten. Weitere Informationen finden Sie unter AusgabeVar.
O Objektmodus. [v1.1.05+]: Bewirkt, dass RegExMatch() alle Informationen der Übereinstimmung und ihrer Teilsuchmuster als Match-Objekt in AusgabeVar speichert. Weitere Informationen finden Sie unter AusgabeVar.
S Analysiert das Suchmuster, um zu versuchen, dessen Performanz zu verbessern. Dies ist nützlich, wenn ein bestimmtes (insbesondere komplexes) Suchmuster viele Male ausgeführt werden soll. Wenn PCRE einen Weg gefunden hat, die Performanz zu verbessern, speichert PCRE diese Entdeckung zusammen mit dem Suchmuster in den Zwischenspeicher, um sie später auf nachfolgende Suchmuster desselben Typs anzuwenden (diese Suchmuster sollten ebenfalls die S-Option enthalten, da sie im Zwischenspeicher nur gefunden werden können, wenn die Optionsbuchstaben vorhanden und in der gleichen Reihenfolge sind).
C Aktiviert den Auto-Callout-Modus. Weitere Informationen finden Sie unter Callouts in regulären Ausdrücken.
`n Wechselt vom Standardzeilenumbruch (`r`n) zu einem einzelnen Zeilenvorschub (`n), das standardmäßig auf UNIX-Systemen verwendet wird. Das gewählte Zeilenumbruchszeichen beeinflusst das Verhalten von Ankern (^ und $) und Punkt-Platzhaltern.
`r Wechselt vom Standardzeilenumbruch (`r`n) zu einem einzelnen Wagenrücklauf (`r).
`a [v1.0.46.06+]: `a erkennt jede Art von Zeilenumbruch, namentlich `r, `n, `r`n, `v/VT/vertical tab/chr(0xB), `f/FF/formfeed/chr(0xC) und NEL/next-line/chr(0x85). [v1.0.47.05+]: Um Zeilenumbrüche nur auf Wagenrücklauf (CR), Zeilenvorschub (LF) und Wagenrücklauf-Zeilenvorschub-Paar (CRLF) zu beschränken, geben Sie stattdessen (*ANYCRLF) in Großbuchstaben am Anfang eines Suchmusters (nach den Optionen) an, z.B. im)(*ANYCRLF)^abc$.

Hinweis: Optional können Leer- und Tabulatorzeichen verwendet werden, um die Optionen voneinander zu trennen.

Häufig verwendete Symbole und Syntax

Element Beschreibung
. Standardmäßig der Platzhalter für ein beliebiges einzelnes Zeichen, das nicht zum Wagenrücklauf-Zeilenvorschub-Paar (`r`n) gehört, was aber mit den Optionen DotAll (s), Zeilenvorschub (`n), Wagenrücklauf (`r), `a oder (*ANYCRLF) geändert werden kann. Zum Beispiel findet ab. eine Übereinstimmung in abc, abz und ab_.
*

Der Platzhalter für 0 oder mehr Vorkommen des vorherigen Elements (Zeichen, Klasse oder Teilsuchmuster). Zum Beispiel findet a* eine Übereinstimmung in ab und aaab, aber auch in einer Zeichenkette, die überhaupt kein "a" enthält.

Punkt-Stern-Platzhalter: .* ist einer der tolerantesten Platzhalter - er findet 0 oder mehr Vorkommen eines beliebigen Zeichens (außer Zeilenumbruch: `r und `n). Zum Beispiel findet abc.*123 eine Übereinstimmung sowohl in abcIrgendwas123 als auch in abc123.

? Der Platzhalter für 0 oder 1 Vorkommen des vorherigen Elements (Zeichen, Klasse oder Teilsuchmuster). Oder auch: "Das voranstehende Element ist optional". Zum Beispiel findet colou?r eine Übereinstimmung sowohl in color als auch in colour, da das "u" optional ist.
+ Der Platzhalter für 1 oder mehr Vorkommen des vorherigen Elements (Zeichen, Klasse oder Teilsuchmuster). Zum Beispiel findet a+ eine Übereinstimmung in ab und aaab. Im Gegensatz zu a* und a? findet a+ jedoch keine Übereinstimmung in einer Zeichenkette, die überhaupt kein "a" enthält.
{min,max}

Der Platzhalter für min bis max Vorkommen des vorherigen Elements (Zeichen, Klasse oder Teilsuchmuster). Zum Beispiel findet a{1,2} eine Übereinstimmung in ab und aaab.

{3} hingegen bedeutet, dass genau 3 Vorkommen gefunden werden, und {3,} bedeutet, dass 3 oder mehr Vorkommen gefunden werden. Hinweis: Die angegebenen Zahlen müssen kleiner als 65536 sein und die erste Zahl darf nicht größer als die zweite Zahl sein.

[...]

Zeichenklassen: Der Platzhalter für ein einzelnes Zeichen. Die eckigen Klammern umschließen eine Liste und/oder einen Bereich von Zeichen. Zum Beispiel ist [abc] ein Zeichen, das entweder a, b oder c ist. Mit einem Bindestrich kann ein Bereich definiert werden, z.B. ist [a-z] ein Zeichen von a bis z. Listen und Bereiche können kombiniert werden, z.B. ist [a-zA-Z0-9_] ein Zeichen, das alphanumerisch oder ein Unterstrich ist.

Nach einer Zeichenklasse kann *, ?, + oder {min,max} folgen. Zum Beispiel findet [0-9]+ 1 oder mehr Vorkommen einer beliebigen Ziffer, wie z.B. in xyz123, aber nicht in abcxyz.

Vordefinierte Zeichenbereiche (POSIX) in Form von [[:xxx:]] werden ebenfalls unterstützt, wobei xxx eines der folgenden Wörter ist: alnum, alpha, ascii (0-127), blank (Leer- oder Tabulatorzeichen), cntrl (Steuerzeichen), digit (0-9), xdigit (Hexadezimalziffern), print, graph (print ohne space), punct, lower, upper, space (Leerraumzeichen), word (äquivalent zu \w).

Innerhalb einer Zeichenklasse müssen die Zeichen nicht mit einem Escapezeichen versehen werden, es sei denn, sie haben eine spezielle Funktion innerhalb einer Klasse, z.B. [\^a], [a\-b], [a\]] und [\\a].

[^...] Der Platzhalter für ein Zeichen, das nicht in der Klasse ist. Zum Beispiel findet [^/]* 0 oder mehr Vorkommen eines Zeichens, das kein Schrägstrich ist, z.B. http://. Ebenso findet [^0-9xyz] ein Zeichen, das weder eine Ziffer noch der Buchstabe x, y oder z ist.
\d Der Platzhalter für eine Ziffer (entspricht der Klasse [0-9]). Großes \D hingegen ist der Platzhalter für ein Zeichen, das keine Ziffer ist. Dieser und die beiden unteren Platzhalter können innerhalb einer Klasse verwendet werden, z.B. ist [\d.-] eine Ziffer, ein Punkt oder ein Minuszeichen.
\s Der Platzhalter für ein Leerraumzeichen, z.B. Leerzeichen, Tabulator, Wagenrücklauf (`r) und Zeilenvorschub (`n). Großes \S hingegen ist der Platzhalter für ein Zeichen, das kein Leerraumzeichen ist.
\w Der Platzhalter für ein Zeichen, das alphanumerisch oder ein Unterstrich ist. Entspricht der Klasse [a-zA-Z0-9_]. Großes \W hingegen ist der Platzhalter für ein Zeichen, das kein alphanumerisches Zeichen oder Unterstrich ist.
^
$

Zirkumflex (^) und Dollarzeichen ($) werden Anker genannt und verbrauchen keine Zeichen; stattdessen verankern sie das Suchmuster am Anfang oder Ende der zu durchsuchenden Zeichenkette.

^ wird in der Regel am Anfang eines Suchmusters angegeben, damit die Übereinstimmung ganz am Anfang einer Zeile gefunden wird. Zum Beispiel findet ^abc eine Übereinstimmung in abc123, aber nicht in 123abc.

$ wird in der Regel am Ende eines Suchmusters angegeben, damit die Übereinstimmung ganz am Ende einer Zeile gefunden wird. Zum Beispiel findet abc$ eine Übereinstimmung in 123abc, aber nicht in abc123.

Beide Anker können zusammen verwendet werden. Zum Beispiel findet ^abc$ eine Übereinstimmung in abc, aber nicht in 123abc oder abc123.

Wenn der zu durchsuchende Text mehrere Zeilen enthält, kann die "m"-Option verwendet werden, um die Anker pro Zeile wirken zu lassen, nicht für den gesamten Text. Zum Beispiel findet m)^abc$ eine Übereinstimmung in 123`r`nabc`r`n789. Ohne die "m"-Option wäre dies nicht der Fall.

\b \b steht für "word boundary" (dt. Wortgrenze) und fungiert wie ein Anker, da es keine Zeichen verbraucht. Es setzt voraus, dass der Status des aktuellen Zeichens als Wortzeichen (\w) das Gegenteil des Status des vorherigen Zeichens ist. Es wird in der Regel verwendet, um zu verhindern, dass das gesuchte Wort in einem anderen Wort gefunden wird. Zum Beispiel wird \bcat\b nicht in catfish gefunden, aber in cat, unabhängig davon, welches Satz- oder Leerraumzeichen es umgibt. Großes \B bewirkt genau das Gegenteil: Es erfordert, dass das aktuelle Zeichen nicht an einer Wortgrenze steht.
| Der senkrechte Strich trennt zwei oder mehr Alternativen. Eine Übereinstimmung liegt vor, wenn eine der Alternativen zutrifft. Zum Beispiel findet gray|grey eine Übereinstimmung sowohl in gray als auch in grey. Das Muster gr(a|e)y hat eine ähnliche Wirkung mithilfe der unten beschriebenen Klammern.
(...)

Eingeklammerte Elemente werden häufig für folgende Zwecke verwendet:

  • Die Reihenfolge der Auswertung festlegen. Zum Beispiel findet (Sun|Mon|Tues|Wednes|Thurs|Fri|Satur)day den englischen Namen jedes Tages.
  • *, ?, + oder {min,max} auf mehrere Zeichen anwenden, nicht nur auf eines. Zum Beispiel findet (abc)+ 1 oder mehr Vorkommen der Zeichenkette "abc", wie z.B. in abcabc123, aber nicht in ab123 oder bc123.
  • Ein Teilsuchmuster erfassen, wie den Punkt-Stern-Platzhalter in abc(.*)xyz. Zum Beispiel speichert RegExMatch() jede Teilzeichenkette, die mit einem Teilsuchmuster übereinstimmt, in das Ausgabe-Array. In ähnlicher Weise erlaubt RegExReplace(), jede Teilzeichenkette, die mit einem Teilsuchmuster übereinstimmt, über Rückreferenzen wie $1 wieder in das Ergebnis einzufügen. Um die Klammern ohne den Nebeneffekt der Erfassung eines Teilsuchmusters zu verwenden, geben Sie ?: für die ersten beiden Zeichen innerhalb der Klammern an, z.B. (?:.*)
  • Optionen spontan ändern. Zum Beispiel aktiviert (?im) die Optionen "nicht-Groß-/Kleinschreibung-sensitiv" und "mehrzeilig" für den restlichen Teil des Suchmusters (oder Teilsuchmusters). (?-im) hingegen deaktiviert beide Optionen. Es werden alle Optionen außer DPS`r`n`a unterstützt.
\t
\r
usw.

Diese Escapesequenzen repräsentieren Sonderzeichen. Die gebräuchlichsten sind \t (Tabulator), \r (Wagenrücklauf) und \n (Zeilenvorschub). In AutoHotkey kann in solchen Fällen optional ein Akzent (`) anstelle des umgekehrten Schrägstrichs verwendet werden. Escapesequenzen in Form von \xhh werden ebenfalls unterstützt, wobei hh der Hexadezimalcode eines ANSI-Zeichens zwischen 00 und FF ist.

[v1.0.46.06+]: \R steht für "ein Zeilenumbruch beliebiger Art", namentlich solche, die bei der `a-Option aufgelistet sind (innerhalb einer Zeichenklasse wird \R einfach wie ein normales "R" behandelt). [v1.0.47.05+]: Um \R auf Wagenrücklauf (CR), Zeilenvorschub (LF) und Wagenrücklauf-Zeilenvorschub-Paar (CRLF) zu beschränken, geben Sie (*BSR_ANYCRLF) in Großbuchstaben am Anfang eines Suchmusters (nach den Optionen) an, z.B. im)(*BSR_ANYCRLF)abc\Rxyz

\p{xx}
\P{xx}
\X

[AHK_L 61+]: Unicode-Eigenschaften. Funktioniert nicht in ANSI-Builds. \p{xx} findet ein Zeichen mit der xx-Eigenschaft, während \P{xx} ein beliebiges Zeichen ohne die xx-Eigenschaft findet. Zum Beispiel findet \pL einen Buchstaben und \p{Lu} einen Großbuchstaben. \X findet eine beliebige Anzahl von Zeichen, die eine erweiterte Unicode-Sequenz bilden.

Eine vollständige Liste aller unterstützten Eigenschaftsnamen und weitere Einzelheiten finden Sie unter www.pcre.org/pcre.txt mit Suchbegriffen wie "\p{xx}".

(*UCP)

[AHK_L 61+]: Aus Performanzgründen erkennen \d, \D, \s, \S, \w, \W, \b und \B standardmäßig nur ASCII-Zeichen, selbst in Unicode-Builds. Wenn das Suchmuster mit (*UCP) beginnt, werden Unicode-Eigenschaften zum Finden von Zeichen verwendet. So zum Beispiel wäre \w dann äquivalent zu [\p{L}\p{N}_] und \d äquivalent zu \p{Nd}.

Greed (Gier): Standardmäßig versuchen die Quantoren *, ?, + und {min,max}, so viele Zeichen wie möglich einzubeziehen, um eine Übereinstimmung zu finden. Um dieses Verhalten auf so wenig Zeichen wie möglich zu begrenzen, fügen Sie nach den Quantoren ein Fragezeichen an. Zum Beispiel bedeutet das Suchmuster <.+> (das kein Fragezeichen enthält): "Suche nach einem <, gefolgt von 1 oder mehr Zeichen, gefolgt von einem >". Um zu verhindern, dass das Suchmuster die komplette Zeichenkette <em>text</em> findet, fügen Sie nach dem Pluszeichen ein Fragezeichen an: <.+?>. Dies führt dazu, dass die Übereinstimmung bereits beim ersten '>' endet und dementsprechend nur der erste HTML-Tag <em> gefunden wird.

Vorausschauende und zurückschauende Behauptungen: Die Gruppen (?=...), (?!...), (?<=...) und (?<!...) werden Behauptungen genannt und verlangen, dass eine Bedingung erfüllt sein muss. Sie verbrauchen keine Zeichen. Zum Beispiel ist abc(?=.*xyz) eine vorausschauende Behauptung, die verlangt, dass die Zeichenkette xyz irgendwo rechts von der Zeichenkette abc vorkommen muss (wenn sie dort nicht ist, gilt das gesamte Suchmuster als keine Übereinstimmung). (?=...) ist eine positive vorausschauende Behauptung, da sie verlangt, dass ein bestimmtes Suchmuster existieren muss. (?!...) hingegen ist eine negative vorausschauende Behauptung, da sie verlangt, dass ein bestimmtes Suchmuster fehlen muss. (?<=...) und (?<!...) sind positive bzw. negative zurückschauende Behauptungen, da sie nach links und nicht nach rechts von der aktuellen Position aus schauen. Zurückschauende Behauptungen unterliegen mehr Einschränkungen als vorausschauende Behauptungen, da sie keine Quantoren mit variierbarer Größe wie *, ? und + unterstützen. Die Escapesequenz \K ähnelt einer zurückschauenden Behauptung, da sie bewirkt, dass alle zuvor gefundenen Zeichen in der final gefundenen Zeichenkette weggelassen werden. Zum Beispiel findet foo\Kbar "foobar", aber meldet, dass es "bar" gefunden hat.

Siehe auch: RegExMatch(), RegExReplace() und SetTitleMatchMode.

Abschließende Bemerkung: Beachten Sie, dass diese Seite nur RegEx-Features umfasst, die häufig zum Einsatz kommen. Andere Features wie z.B. bedingte Teilsuchmuster fehlen gänzlich. Die komplette PCRE-Bedienungsanleitung finden Sie unter www.pcre.org/pcre.txt (englisch).