Regex Elemente
Summary: Ein Überblick über die Elemente Regulärer Ausdrücke
Index: RegularExpressions

Wie bereits auf

12.06.2004 22:06:58 - Alexander Zeitler
WasSindRegexen gesagt kann man Regexen als eine Art Programmiersprache für die Beschreibung von Mustern in Zeichenketten betrachten. Und als Sprache bestehen Regexen natürlich aus verschiedenen Elementen.

Zeichen

Unter Zeichen verstehen wir z.B. A, b, &, #.

Daraus können wir Zeichenketten aufbauen die wie suchen wollen, z.B: 'String' - diese Kette trifft zu wenn sie in einer Eingabe auf 'String' trifft. Dies gilt auch wenn 'String' Teil eines längeren Wortes ist. Will man nur auf die Kette String reagieren, so benötigt man Begrenzungszeichen. Mehr dazu weiter unten.

Einige Zeichen werden allerdings in Regexen als Steuerzeichen oder ähnliches verwendet, man muss sie also besonders behandeln wenn man sie 'escapen', d.h. kennzeichnen daß sie nicht als Steuerzeichen verwendet werden sollen. Ebenso muss man nicht druckbare Zeichen 'escapen', will man sie im Suchmuster verwenden, dies geschieht durch Voranstellen eines '\'.

Steuerzeichen sind:

. $ ^ { [ ( | ) * + ? \

Nicht darstellbare Zeichen sind:

\a Alarm(Bell)

\b Backspace - Achtung, dies ist ein Sonderfall den wir an anderer Stelle gesondert behandeln.

\e Escape

\f Formularvorschub

\n Newline

\r Wagenrücklauf

\t Tabulator

\v Vertikaler Tabulator

\cX Steuerzeichen, hier als Beispiel strg-X

Zeichen können auch mittels Ihres ASCII/Unicodes spezifiert werden:

\040 Oktales Format, 1 - 3 Stellen - ist die Zahl einstellig ohne führende '0' oder entspricht sie einer 'Capture'-gruppe, so wird sie als Rückbezug aufgefasst

\x20 Hexadezimalformat, 2 Stellen

\u0020 Unicode hexadezimal, 4 Stellen

Mengenangaben

Häufig will man ein Zeichen mehr als einmal oder genau eine bestimmte Anzahl treffen. Diese Angaben lassen sich wie folgt machen:

Allgemeine Angaben:

* Null oder mehrfach

+ Einmal oder mehr

? Null oder einmal

Spezifische Angaben:

{n} genau n-mal

{n,} mindestens n-mal

{n,m} mindestens n-mal, maximal m-mal. m > n

'Gierigkeit' mindern (siehe auch 'RegexGierigkeit') durch Anhängen eines '?', z.B.:

*? Möglichst wenige Treffer

?? Null wenn möglich, sonst ein Treffer

{n,m}? Mindestens n Treffer, aber so wenige wie möglich

Zeichenklassen

Wenn an einer Stelle einer Regex verschiedene Zeichen zugelassen sein sollen, muss man das ja irgendwie angeben können. Dazu sind Zeichenklassen da. Man definert eine Zeichenklasse indem man die erlaubten Zeichen in eckige Klammern setzt:

[aBCD] entspricht 'hier ist kleines a oder grosses B, C oder D erlaubt

Man kann natürlich auch Abkürzungen verwenden, das ganze Alphabet in Gross- und Kleinschreibung explizit angeben wäre ja lästig, ebenso wie Ziffern. Kontinuierliche Folgen werden durch erstes und letztes Zeichen, verbunden durch ein '-' spezifiert:

[a-zA-Z0-9] entspricht allen Klein- und Grossbuchstaben und allen Ziffern

Da Programmierer faul^H^H^H^H effizient sind, gibt es Kürzel für ganz spezielle Klassen:

  • \w Zeichen die zu einem Wort gehören, also die Definition oben plus einige Satzzeichen, '-' usw. und diverse Unicodezeichen. Details siehe .NET SDK Doku.
  • \W die Verneinung von \w
  • \s Leerzeichen - u.a. Leerzeichen, Tabulator, Linefeed.
  • \S die Verneinung von \s
  • \d die Ziffern 0 - 9
  • \D die Verneinung von \d
  • . steht für ein beliebiges Zeichen ausser \n (ausgenommen die Regex wird in einem speziellen Modus ausgeführt.)

Das Thema 'Zeichenklassen' wird in einer eigenen Rubrik '

12.06.2004 22:07:34 - Alexander Zeitler
RegexZeichenKlassen' ausführlicher behandelt.

Ebenso kann man bestimmte Zeichen ausschliessen. Dies erreicht man durch ein vorangestelltes '^':

[^a-z] steht für 'alles ausser Kleinbuchstaben'

Steuerzeichen

Und mit der Vorstellung des '^' wären wir bei den Steuerzeichen für das Verhalten von Regexen angelangt. Dieses Steuerzeichen hat allerdings ausserhalb einer Zeichenklasse eine völlig andere Bedeutung. Es ist ein sogenannter 'Anker', der das Suchmuster innerhalb des zu untersuchenden Strings an eine bestimmte Position bindet. Es gibt verschiedene Anker:

^ Anfang des String, bzw. Zeilenanfang bei 'multiline' Option (siehe RegexOptionen)

$ Ende des String, bzw. Zeilenende oder vor \n bei 'multiline' Option

\A Anfang des String, auch bei 'multiline'

\Z Ende des String oder vor \n, auch bei 'multiline'

\z Ende des String, auch bei 'multiline'

\b Wortgrenze (zwischen zwei Zeichen \w und \W) - dies ist der oben angesprochene Sonderfall. \b als 'Backspace' gilt nur in Zeichenklassen oder Ersetzungsmustern

\B Verneinung von \b

\G Muss an den vorhergehenden Treffer anschliessen

Nicht vergessen: Anker treffen zwischen Zeichen zu, sie liegen niemals auf einem Zeichen!

Sonstiges

Weitere Elemente von Regexen werden auf separaten Seiten abgehandelt:

12.06.2004 22:07:47 - Alexander Zeitler
RegexGruppen

RegexRueckbezuege