Sql-und-Xml - Home

Regular Expressions

RegEx-Sonderzeichen und -konstrukte

Die folgende Liste umfaßt die in RegEx-Suchmustern verwendbaren Ausdrücke mit speziellen Bedeutungen.
Escapezeichen
\a
Klingelzeichen
\b
stellt in einer mit [] selbst definierten Zeichenklasse das Rücktastzeichen  dar
\t
Tabulator, 	
\r
Wagenrücklauf, &#D;
\v
vertikaler Tabulator, &#B;
\f
Seitenvorschub, &#C;
\n
neue Zeile, &#A;
\e
Escape-Zeichen, 
\040
ASCII-Zeichen als dreistellige Oktalzahl, hier wird das Leerzeichen dargestellt. Fehlt die führende Null, ist nur eine Ziffer notiert und gibt es eine passende Aufzeichnungsgruppe mit dieser Nummer, so wird diese eingesetzt.
\x3c
ASCII-Zeichen in hexadezimaler Schreibweise, hier die öffnende Spitzklammer < mit Code 3c
\cC
ASCII-Steuerzeichen, hier Control-C
\u00A9
Unicode-Zeichen in hexadezimaler Darstellung mit genau vier Stellen, hier das Copyright-Zeichen © mit dem Hex-Code 00A9
Zeichenklassen
.
Der Punkt steht für alle Zeichen mit Ausnahme von \n. Ist die Single-Line-Option gewählt, dann ist \n mit eingeschlossen.
[Menge von aufgezählten Zeichen]
Jedes einzelne Zeichen aus der Menge
[^Menge von aufgezählten Zeichen]
Jedes einzelne Zeichen, welches nicht zu dieser Menge gehört
[a-fk-z]
Jedes Zeichen aus dem Zeichenbereich 'a' bis 'f' oder 'k' bis 'z' wird gefunden
\p{IsUnicode-Block}
Jedes Zeichen des notierten Unicode-Blocks. Aus dem Blocknamen müssen alle Leerzeichen entfernt und ein 'Is' davorgesetzt werden. Die zulässigen Unicode-Blöcke sind unter Unicode-Datenbank gelistet (Spalte 'NET', Y). Die gültigen Werte wurden durch Testen ermittelt.
\p{Unicode-Kategorie}
Jedes Zeichen der angegebenen Unicode-Kategorie. Die Kategorie ist in Kurzform (\p{Mn} für die Kategorie 'Mark, Enclosing') zu notieren, hier werden alle 30 Kategorien unterstützt
\P{IsUnicode-Block|Kategorie}
Jedes Zeichen, welches nicht zum angegebenen Unicode-Block bzw. zur Kategorie gehört
\w
Ein beliebiges Wortzeichen aus den Unicode-Zeichenkategorien [\p{Ll}\p{Lu}\p{Lt}\p{Lo}\p{Nd}\p{Pc}]. Falls in .NET die ECMAScript-Konformität gefordert ist, stellt \w nur die Zeichen [a-zA-Z_0-9] dar.
\W
Ein beliebiges Nicht-Wortzeichen, die Verneinung von \w. Falls in .NET die ECMAScript-Konformität gefordert ist, stellt \W die Zeichenmenge [^a-zA-Z_0-9] dar.
\s
Ein beliebiges Leerraumzeichen aus den Unicode-Zeichenkategorien [\f\n\r\t\v\x85\p{Z}]. Man beachte, daß NEL (#x85), die Zeilenendmarkierung auf Mainframes sowie #x2028, das Unicode-Zeichen für eine neue Zeile als Element von \p{Zl}, hier mit aufgeführt ist. Xml-Dokumente der Version 1.1 können also konsistent verarbeitet werden. Falls in .NET die ECMAScript-Konformität gefordert ist, stellt \s nur die Zeichen [ \f\n\r\t\v] dar.
\S
Ein beliebiges Nicht-Leerzeichen, die Verneinung von \s. Falls in .NET die ECMAScript-Konformität gefordert ist, stellt \S die Zeichenmenge [^ \f\n\r\t\v] dar.
\d
Eine beliebige Dezimalziffer aus \p{Nd} bzw. [0-9] für ECMAScript-Konformität.
\D
Eine beliebige Nicht-Dezimalziffer bzw. [^0-9] für ECMAScript-Konformität.
Atomare Assertionen mit Breite Null
^
Der Vergleich muß am Anfang der Zeichenfolge erfolgen. Falls die Multiline-Option aktiv ist, wird zusätzlich jeder Zeilenanfang gefunden
$
Der Vergleich muß am Ende der Zeichenfolge erfolgen. Ist Multiline aktiv, so wird zusätzlich jedes Zeilenende gefunden
\A
Vergleich am Anfang der Zeichenfolge, unabhängig von Multiline
\Z
Vergleich am Ende der Zeichenfolge oder vor dem letzten \n am Ende, unabhängig von Multiline
\z
Vergleich am Ende der Zeichenfolge, unabhängig von Multiline
\G
Der Vergleich muß an der Stelle erfolgen, an welcher der vorige Vergleich geendet hat
\b
Verglichen wird an einer Begrenzung zwischen Wortzeichen (\w) und Nicht-Wortzeichen (\W), es muß also eine Wortbegrenzung sein
\B
Die aktuelle Position darf keine Wortbegrenzung sein. Es muß sich also um eine Position innerhalb eines Wortes oder innerhalb von Nicht-Wort-Zeichen handeln
Gruppierungen
(  )
Aufzeichnung der übereinstimmenden Teilzeichenfolge, welche durch das Suchmuster innerhalb der Klammern gefunden wird. Das aufgezeichnete Ergebnis ist nur über eine Nummer erreichbar.
(?<name>  ) oder: (?'name'  )
Aufzeichnung der übereinstimmenden Teilzeichenfolge, hier ist das Ergebnis durch 'name' erreichbar. Die Version mit einfachen Hochkommata kann für aspx-Seiten genutzt werden.
(?:  )
Nicht aufzeichnende Gruppe, falls aus logischen Gründen Klammern notwendig sind, das durch die Klammern aufgezeichnete Teilergebnis jedoch nicht weiterverarbeitet wird. Dieses Konstrukt wird schneller als die aufzeichnende Gruppe verarbeitet. Zum Testen empfielt es sich, benannte Teilzeichenfolgen großzügig zu verwenden. Funktioniert alles wie gewünscht, ersetzt man alle nicht weiter benötigten Namen durch Doppelpunkte.
Rückverweise
\k<  >
Sucht die durch die Nummer in    nach Position oder die durch den Namen in    definierte aufgezeichnete Teilzeichenfolge
\k'  '
Leistet genau dasselbe wie die vorige Zeile, kann in Umgebungen genutzt werden, in welchen Spitzklammern Probleme verursachen können (aspx-Seiten)
Lookahead / Lookbehind-Assertionen der Breite Null
(?=  )
Positive Lookahead-Assertion. Der Vergleich wird nur fortgesetzt, falls auf die aktuelle Position die angegebene Zeichenfolge folgt. Das Konstrukt wird nicht rückwärts verarbeitet.
(?!  )
Negative Lookahead-Assertion. Fortgesetzt wird, falls auf die derzeitige Position die notierte Zeichenfolge nicht folgt
(?<=  )
Positive Lookbehind-Assertion. Die Weiterverarbeitung erfolgt, falls bis zur aktuellen Position die angegebene Zeichenfolge gefunden wurde. Keine Einbeziehung in die Rückwärtsverarbeitung.
(?<!  )
Negative Lookbehind-Assertion. Die Suche wird fortgesetzt, falls die angegebene Zeichenfolge vor der aktuellen Position nicht gefunden wurde.
Nicht zurückverfolgende Teilausdrücke
(?>  )
Dies deklariert ein nicht zurückverfolgendes Suchmuster (gieriger Teilausdruck, greedy subexpression). Der Ausdruck wird sofort maximal aufgelöst. Folgen im Suchmuster weitere Zeichenkriterien, die mit dem längsten Ausdruck nicht gefunden werden können, so wird im Gegensatz zum Standardhandling nicht versucht, durch zeichenweises Verkürzen der Teilzeichenfolge doch noch eine Übereinstimmung zu finden.
Quantifikatoren
Quantifikatoren legen fest, wie oft der zuvor notierte Ausdruck mindestens/höchstens/genau auftreten muß, um eine positive Übereinstimmung zurückzugeben. Es gibt drei vordefinierte (*/+/?) sowie selbstdefinierte Quantifikatoren, letztere werden durch Zahlen in geschweiften Klammern ausgedrückt. Fehlt ein Quantifikator, so entspricht dies {1}, der Ausdruck muß genau einmal gefunden werden.

*
Null oder mehr Übereinstimmungen, kann auch als {0,} notiert werden
+
Eine oder mehr Übereinstimmungen, gleichbedeutend zu {1,}
?
Null oder eine Übereinstimmung, wie {0, 1}
{n}
Fordert genau n Übereinstimmungen
{n,}
Mindestens n Übereinstimmungen erfüllen
{n,m}
Mindestens n, höchstens m Übereinstimmungen sind erlaubt
*?
gibt die Übereinstimmung mit möglichst wenigen Wiederholungen an (lazy *)
+?
wie lazy *, jedoch mit mindestens einer Übereinstimmung
??
gibt, falls möglich, null Wiederholungen an, ansonsten eine
{n}?
entspricht {n}
{n,}?
gibt möglichst wenige Wiederholungen an, mindestens jedoch n viele
{n,m}?
gibt so wenige Wiederholungen zwischen n und m an wie möglich
Alternierungen
|
Sucht zunächst nach dem links vom Balken stehenden Ausdruck. Kann dieser nicht gefunden werden, wird versucht, den rechts stehenden Ausdruck zu nutzen, bevor die aktuelle Position endgültig verworfen wird.
(?(  )  |  )
If/Then-Verzweigung. Der erste Ausdruck wird als positives Lookahead interpretiert. Ist dieses erfolgreich, so wird der zweite Ausdruck, ansonsten der Ausdruck nach | geprüft.
Sonstige Konstrukte
(?imnsx-imnsx:  )
Inline-Änderung einer der Optionen IgnoreCase (i), Multiline (m), ExplicitCapture (n), Singleline (s) oder IgnorePatternWhitespace (x). Jede dieser Optionen kann innerhalb dieser Klammer neu gesetzt werden und überschreibt entweder den Standardwert oder den bei der Objekterzeugung festgelegten Wert. Diese Inline-Optionen können geschachtelt werden, so daß eine Option in einer Klammer zunächst gesetzt und in einer inneren Klammer wieder aufgehoben wird.
(?#  )
Inline-Kommentar. Bis zur schließenden Klammer können beliebige Zeichen folgen, die gesamte Zeichenfolge wird ignoriert. Beispiel: (\b\w+?\b(?# Suche nach einem Wort))
# bis zum nächsten Zeilenende
Falls die Option IgnorePatternWhitespace (kurz: x) gesetzt ist, kann hierdurch der Rest dieser Zeile als Kommentar notiert werden. Dies ist sinnvoll bei umfangreicheren Ausdrücken, die auf mehrere kommentierte Zeilen verteilt werden können
Optionen
Die Optionen können bei der Erstellung eines RegEx-Objektes festgelegt werden. Folgt auf die Option ein Kleinbuchstabe, so kann dieser als Inline-Darstellung der Option genutzt werden.

IgnoreCase / i
Ignoriert Groß/Kleinschreibung, die Suche nach regex findet auch RegEx lernen
SingleLine / s
Aktivierung des Einzeilenmodus: Der Punkt akzeptiert auch den Zeilenwechsel \n, also alle Zeichen. Falls diese Option nicht gesetzt ist, erkennt der Punkt jedes Zeichen mit Ausnahme von \n.
Multiline / m
Mehrzeilenmodus: Falls diese Option gewählt ist, findet ^ jeden Beginn einer neuen Zeile und $ jedes Zeilenende sowie die Position vor dem Ende der Zeichenfolge bzw. vor dem letzten \n. Falls die Option fehlt, finden die beiden Ausdrücke nur den absoluten Beginn bzw. das Ende der Eingabezeichenfolge.
ExplicitCapture / n
Alle aufzeichnenden Gruppen müssen explizit benannt werden. Fehlt ein Name, wird die Gruppe nicht aufgezeichnet, als äquivalent zu (?:  ) betrachtet
IgnorePatternWhitespace / x
Kommentarmodus: Alle WhiteSpace ohne explizite Maskierung durch werden entfernt, das Suchmuster kann Zeilenumbrüche enthalten. Zwischen # und Zeilenende sind Kommentare notiert
RightToLeft
Durchsucht die Zeichenfolge von rechts nach links anstatt umgekehrt. Innerhalb des Suchmusters wird nichts umgedreht
CultureInvariant
Bei zusätzlich genutzter Option IgnoreCase werde Vergleiche der Groß-Kleinschreibung kulturinvariant durchgeführt
ECMAScript
Stellt die Kompatibilität zu ECMAScript her: Die Zeichenklassen \w, \s und \d werden um Unicode-Varianten verkleinert. Ferner gibt es drei Unterschiede in der Behandlung von uneindeutigen Rückverweisen, die als Oktalzahlen oder als Rückverweise interpretiert werden können. Diese werden jedoch hier nicht näher erläutert, man möge benannte Teilzeichenfolgen verwenden
Compiled
Der Code wird in eine Assembly kompiliert, bei wiederholter Ausführung ist dies schneller. Der Code kann jedoch nicht mehr beim Zerstören des RegEx-Objektes, sondern nur noch durch ein Entladen der Domäne entfernt werden, so daß bei wiederholtem Kompilieren Speicherlecks auftreten können.
None
Es wurde keine Option festgelegt

© 2003-2015 Jürgen Auer, Berlin.