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

Inhaltsverzeichnis

Grundlagen

Übereinstimmung überall finden: Standardmäßig wird ein regulärer Ausdruck eine Übereinstimmung, sofern vorhanden, an einer beliebigen Stelle innerhalb einer Zeichenkette finden. 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 haben keine spezielle Funktion und können normal in einem regulären Ausdruck verwendet werden. Die Zeichen \.*?+[{|()^$ hingegen haben eine spezielle Funktion und müssen demzufolge mit einem umgekehrten Schrägstrich versehen werden, wenn ihre Funktion außer Kraft gesetzt werden soll. Zum Beispiel wird \. als normaler Punkt und \\ als normaler umgekehrter Schrägstrich interpretiert. 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 (das heißt, dass die Groß-/Kleinschreibung berücksichtigt wird). Mit der "i"-Option kann das geändert werden. Das Suchmuster i)abc würde beispielsweise nach "abc" suchen, 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 null oder mehr der folgenden Optionen an, gefolgt von einer schließenden runden Klammer. Das Suchmuster "im)abc" beispielsweise sucht mit den Optionen "nicht-Groß-/Kleinschreibung-sensitiv" und "mehrzeilig" nach abc (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 Begrenzungszeichen (wie z. B. Schrägstrich) erforderlich sind, und demzufolge diese innerhalb des Suchmusters nicht mit einem Escapezeichen versehen werden müssen. Darüber hinaus können die Optionen auf diese Weise einfacher geparst werden, was sich positiv auf die Leistung auswirkt.

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

Multiline-Modus. Heuhaufen wird nicht als durchgehende Zeile, sondern als eine Sammlung einzelner Zeilen angesehen (sofern Zeilenumbrüche enthalten sind). Folgende Änderungen treten dabei in Kraft:

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

2) Dollar-Zeichen ($) findet eine Übereinstimmung vor jedem Zeilenumbruch (sowie ganz am Ende von Heuhaufen).

Zum Beispiel würde das Suchmuster "m)^abc$" nur eine Übereinstimmung im Heuhaufen "xyz`r`nabc" finden, wenn die "m"-Option vorhanden ist.

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). Beachten Sie, dass ein Zeilenumbruch üblicherweise aus zwei Zeichen besteht (`r`n), demzufolge sind zwei Punkte für eine Übereinstimmung erforderlich. Diese Option hat keinen Einfluss auf negative Klassen wie z. B. [^a] - diese Art von Klassen finden immer Zeilenumbrüche.
x Bewirkt, dass jegliche 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 auch ignoriert, weil sie, sobald sie PCRE erreichen, bereits rohe/normale Leerraumzeichen sind (\n und \t hingegen werden nicht ignoriert, weil sie PCRE-Escapesequenzen sind). Die x-Option ignoriert zudem eine Zeichenkette, die mit einer nicht-escapezeichenversehenen Raute (#) außerhalb einer Zeichenklasse beginnt und mit einem Zeilenumbruch endet. Dies macht es möglich, Kommentare in ein kompliziertes 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; das heißt, dass das Suchmuster nur am Anfang von Heuhaufen gefunden werden kann. Diese Option ist prinzipiell das gleiche wie, als würde man das Suchmuster explizit mit "^" verankern.
D Zwingt das Dollar-Zeichen ($), eine Übereinstimmung ganz am Ende von Heuhaufen zu finden, selbst 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, in denen nur eines aus einer Sammlung von gleichnamigen Teilsuchmustern übereinstimmen kann. Hinweis: Wenn mehr als eine Instanz eines bestimmten Namens mit etwas übereinstimmt, wird nur die ganz links gespeichert. Außerdem sind Variablennamen nicht Groß-/Kleinschreibung-sensitiv.
U Ungreedy-Modus. Bringt die Quantoren *+?{} 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 ungreedy gemacht werden, indem ihm ein Fragezeichen nachgestellt wird. 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. Aktuell gibt es nur ein einziges Feature dieser Art - es bewirkt, dass jeder umgekehrter Schrägstrich, gefolgt von einem Buchstaben ohne spezielle Funktion, dazu führt, dass die Übereinstimmung fehlschlägt und ErrorLevel entsprechend gesetzt wird. Diese Option hilft dabei, ungenutzte PCRE-Escapesequenzen für die zukünftige Verwendung zu reservieren. Lässt man diese Option weg, wird der umgekehrte Schrägstrich vor einem Buchstaben ohne spezielle Funktion einfach ignoriert (z. B. wird sowohl \g als auch g als normales g erkannt). Der umgekehrte Schrägstrich vor einem nicht-alphabetischen Zeichen ohne spezielle Funktion wird immer ignoriert, unabhängig von dieser Option (z. B. wird 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 gefundenen Teilzeichenketten. Weitere Informationen finden Sie unter AusgabeVar.
S Analysiert das Suchmuster, um zu versuchen, dessen Leistung zu verbessern. Dies ist nützlich, wenn ein bestimmtes Suchmuster (insbesondere ein komplexes) viele Male ausgeführt werden soll. Wenn PCRE einen Weg gefunden hat, die Leistung zu verbessern, wird PCRE diese Entdeckung zusammen mit dem Suchmuster in den Cache speichern, um sie später auf nachfolgende Suchmuster gleicher Art anzuwenden (diese Suchmuster sollten ebenfalls die S-Option enthalten, weil sie nur im Cache gefunden werden können, wenn die Optionsbuchstaben vorhanden und in gleicher Reihenfolge sind).
C Aktiviert den Auto-Callout-Modus. Weitere Informationen finden Sie unter Callouts in regulären Ausdrücken.
`n Wechselt vom Standard-Zeilenumbruch (`r`n) zu einem einzelnen LF-Zeichen (`n), welches auf UNIX-Systemen der Standard-Zeilenumbruch ist. Das gewählte Zeilenumbruchszeichen beeinflusst das Verhalten von Ankern (^ und $) und Punkt-Platzhaltern.
`r Wechselt vom Standard-Zeilenumbruch (`r`n) zu einem einzelnen CR-Zeichen (`r).
`a [v1.0.46.06+]: `a erkennt jede Art von Zeilenumbruch, genauer gesagt `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 CR, LF und 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

. Standardmäßig der Platzhalter für ein beliebiges einzelnes Zeichen, außer das CR-Zeichen (`r) bei einem Zeilenumbruch (`r`n), was aber mit den Optionen DotAll (s), LF (`n), CR (`r), `a oder (*ANYCRLF) geändert werden kann. ab. beispielsweise wird in abc, abz und ab_ gefunden.
*

Der Platzhalter für 0 oder mehr Vorkommen des vorherigen Elements (Zeichen, Klasse oder Teilsuchmuster). a* beispielsweise wird in ab und aaab gefunden, 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). abc.*123 beispielsweise wird sowohl in abcIrgendwas123 als auch in abc123 gefunden.

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

Der Platzhalter für min bis max Vorkommen des vorherigen Elements (Zeichen, Klasse oder Teilsuchmuster). a{1,2} beispielsweise wird in ab und aaab gefunden.

{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, außerdem darf die erste Zahl nicht größer als die zweite Zahl sein.

[...]

Zeichenklassen: Der Platzhalter für ein Zeichen, das in den eckigen Klammern direkt oder via Zeichenbereich definiert ist. [abc] beispielsweise bedeutet: "ein Zeichen, das entweder a, b oder c ist". Mithilfe eines Bindestrichs kann ein Bereich definiert werden; [a-z] beispielsweise bedeutet: "ein Zeichen von a bis z". Zeichenlisten und -bereiche können kombiniert werden; [a-zA-Z0-9_] beispielsweise bedeutet: "ein Zeichen, das alphanumerisch oder ein Unterstrich ist".

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

Des Weiteren kann man vordefinierte Zeichenbereiche (POSIX) in Form von [[:xxx:]] angeben; xxx ist dabei eines der folgenden Wörter: alnum, alpha, ascii (0-127), blank (Leerzeichen oder Tabulator), cntrl (Steuerzeichen), digit (0-9), xdigit (hexadezimale Ziffern), print, graph (print ohne space), punct, lower, upper, space (Leerraumzeichen), word (das gleiche wie \w).

In einer Zeichenklasse müssen nur Zeichen mit einem Escapezeichen versehen werden, die innerhalb einer Klasse eine spezielle Funktion haben; z. B. [\^a], [a\-b], [a\]] und [\\a].

[^...] Der Platzhalter für ein Zeichen, das nicht in den eckigen Klammern direkt oder via Zeichenbereich definiert ist. [^/]* beispielsweise findet 0 oder mehr Vorkommen eines beliebigen Zeichens, das kein Schrägstrich ist, wie z. B. http://. [^0-9xyz] beispielsweise findet 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; [\d.-] beispielsweise bedeutet: "eine Ziffer, ein Punkt oder ein Minuszeichen".
\s Der Platzhalter für ein Leerraumzeichen, sprich Leerzeichen, Tabulatorzeichen, CR-Zeichen (`r) und LF-Zeichen (`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 Dollar-Zeichen ($) werden Anker genannt und verbrauchen keine Zeichen; stattdessen verankern sie das Suchmuster am Anfang oder Ende des zu durchsuchenden Textes.

^ wird in der Regel am Anfang eines Suchmusters angegeben, um zu erreichen, dass die Übereinstimmung ganz am Anfang einer Zeile stattfindet. ^abc beispielsweise wird in abc123 gefunden, aber nicht in 123abc.

$ wird in der Regel am Ende eines Suchmusters angegeben, um zu erreichen, dass die Übereinstimmung ganz am Ende einer Zeile stattfindet. abc$ beispielsweise wird in 123abc gefunden, aber nicht in abc123.

Beide Anker können kombiniert werden. ^abc$ beispielsweise wird nur in abc gefunden, aber nicht in 123abc oder abc123.

Wenn der zu durchsuchende Text mehrere Zeilen enthält, können Sie mit der "m"-Option dafür sorgen, dass die Anker nicht für den gesamten Text, sondern für jede Zeile gelten. m)^abc$ beispielsweise wird in 123`r`nabc`r`n789 gefunden. Ohne die "m"-Option wäre dies nicht der Fall.

\b \b bedeutet "word boundary" (auf Deutsch: Wortgrenze) und fungiert wie ein Anker, weil 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 innerhalb eines anderen Wortes gefunden wird. \bcat\b beispielsweise wird nicht in catfish gefunden, aber es wird in cat gefunden, unabhängig davon, welches Satz- oder Leerraumzeichen es umgibt. Großes \B bewirkt genau das Gegenteil: Es setzt voraus, dass sich das aktuelle Zeichen nicht an einer Wortgrenze befindet.
| Der senkrechte Strich trennt zwei oder mehr Alternativen. Es erfolgt eine Übereinstimmung, wenn eine der Alternativen zutrifft. gray|grey beispielsweise wird sowohl in gray als auch in grey gefunden. gr(a|e)y bewirkt das gleiche, allerdings muss man dafür die unten beschriebenen runden Klammern verwenden.
(...)

Eingeklammerte Elemente werden häufig verwendet, um Folgendes zu bewirken:

  • Die Reihenfolge der Auswertung bestimmen. Zum Beispiel findet (Sun|Mon|Tues|Wednes|Thurs|Fri|Satur)day den englischen Namen jeden Tages.
  • *, ?, + oder {min,max} auf mehrere Zeichen anwenden. (abc)+ beispielsweise findet 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. Die RegExMatch-Funktion speichert in diesem Fall die Teilzeichenkette, die von jedem Teilsuchmuster gefunden wird, in das Ausgabe-Array. Die RegExReplace-Funktion hingegen kann mittels Rückreferenzen wie $1 die Teilzeichenkette, die von jedem Teilsuchmuster gefunden wird, wieder in das Ergebnis einfü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; zum Beispiel: (?:.*)
  • Optionen spontan ändern. (?im) beispielsweise schaltet die Optionen "nicht-Groß-/Kleinschreibung-sensitiv" und "mehrzeilig" für den restlichen Teil des Suchmusters (oder Teilsuchmusters) ein. (?-im) hingegen würde beide Optionen ausschalten. 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 (CR-Zeichen) und \n (LF-Zeichen). In AutoHotkey kann in solchen Fällen anstelle des umgekehrten Schrägstrichs optional ein Akzent (`) verwendet werden. Escapesequenzen in Form von \xhh werden ebenfalls unterstützt - hh ist hierbei der hexadezimale Code eines beliebigen ANSI-Zeichens zwischen 00 und FF.

[v1.0.46.06+]: \R bedeutet "ein Zeilenumbruch beliebiger Art", sprich solche, die unter `a-Option aufgelistet sind (innerhalb einer Zeichenklasse wird \R lediglich als normales "R" behandelt). [v1.0.47.05+]: Um \R auf CR, LF, und 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-Versionen. \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 beliebigen Buchstaben und \p{Lu} einen beliebigen 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 Leistungsgründen erkennen \d, \D, \s, \S, \w, \W, \b und \B standardmäßig nur ASCII-Zeichen, selbst in Unicode-Versionen. 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 neben der Zeichenkette abc vorkommen muss (wenn sie dort nicht ist, gilt das gesamte Suchmuster als keine Übereinstimmung). (?=...) ist eine positive vorausschauende Behauptung, weil sie verlangt, dass ein bestimmtes Suchmuster existieren muss. (?!...) hingegen ist eine negative vorausschauende Behauptung, weil sie verlangt, dass ein bestimmtes Suchmuster fehlen muss. (?<=...) und (?<!...) sind positive bzw. negative zurückschauende Behauptungen, weil sie nach links und nicht nach rechts von der aktuellen Position schauen. Zurückschauende Behauptungen unterliegen mehr Einschränkungen als vorausschauende Behauptungen, weil sie keine Quantoren mit variierbarer Größe unterstützen, wie z. B. *, ? und +. Die Escapesequenz \K ist mit einer zurückschauenden Behauptung vergleichbar, da sie bewirkt, dass alle zuvor gefundenen Zeichen in der endgültigen gefundenen Zeichenkette weggelassen werden. foo\Kbar beispielsweise wird "foobar" finden, aber melden, dass es "bar" gefunden hat.

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

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).