“(RegEx) (einfach) - $2 $1″ - Was ist das denn für ein komischer Name?

17. Juni 2009

Ein regulärer Ausdruck ist eine Zeichenfolge, mit der man eine Menge von Zeichenfolgen, sogenannten Wörtern, beschreiben kann. RegEx ist eine Abkürzung aus dem englischen (regular expression). Reguläre Ausdrücke sind theoretisch fundiert. Man kann sie z.B. zum Suchen von Zeichenfolgen in Texten verwenden.

Es gibt verschiedene Syntaxen für reguläre Ausdrücke. Die bekanntesten ist die von Perl und die POSIX-Syntax. Im weiteren werden wir auf diverse Sonderzeichen und -konstrukte stoßen. (RegEx) (einfach) - $2 $1 bedeutet dabei folgendes:

Ein Klammernpaar ( ) gruppiert eine Zeichenfolge. Mit den Variablen (Backreferenzen) $1, $2, $3 und so weiter lässt sich auf das erste, zweite, dritte (und so weiter) Klammernpaar referenzieren. Somit wird genau der Audruck nocheinmal erwartet, der im referenzierten Klammernpaar gefunden wurde.

(RegEx) (einfach) - $2 $1 heißt somit einfach: RegEx einfach - einfach RegEx.

Einfach, oder?

Buchstaben und Ziffern sind reguläre Ausdrücke

17. Juni 2009

Jeder Buchstabe und jede Ziffer ist ein regulärer Ausdruck.

Ein sehr einfacher RegEx ist also a oder 1. In dem folgenden Text würden die beiden Ausdrücke wie angezeigt matchen, d.h. dort einen Treffer erzeugen:

Anton rät: Bei Feuer einfach 112 anrufen.

Zu beachten ist hier, dass grundsätzlich zwischen Groß- und Kleinschreibung unterschieden wird. Je nachdem, welche RegEx-Ausfürhmethode eingesetzt wird, lässt sich aber die case-sensitivity abschalten.

Zeichengruppen sind reguläre Ausdrücke

17. Juni 2009

Es lassen sich auch mehrere Zeichen, Buchstaben oder Ziffern zu einer Gruppe zusammenfügen. Die geschieht innerhalb eines Paares eckiger Klammern [ ]. Dazu lassen sie sich einzeln aufzählen oder aber als Bereich definieren:

  1. [amg] - Die Buchstaben a, m und g sind gemeint. (einzeln aufgezählt)
  2. [f-y] - Alle Buchstaben von f bis y sind gemeint. (Bereich definiert)
  3. [145a-d] - Die Ziffern 1, 4, 5 und die Buchstaben a bis d sind gemeint. (Kombination aus Aufzählung und Bereich)

Wir matchen nun alle drei Zeichengruppen gegen den selben Satz.

  1. Ein Text mit den Zahlen 0815 und 4711 wird gegen die obigen RegEx gematcht.
  2. Ein Text mit den Zahlen 0815 und 4711 wird gegen die obigen RegEx gematcht.
  3. Ein Text mit den Zahlen 0815 und 4711 wird gegen die obigen RegEx gematcht.

Wie zu erkennen ist, werden die Zeichen einzeln gematcht. Jede Zeichengruppe beschreibt nur ein einziges Zeichen.
Zu beachten ist, dass die eckigen Klammern Sonderkonstrukte sind. Somit müssen diese, wenn nach ihnen gesucht werden soll, entwertet werden: \[ bzw. \] . Dem Bindestrich - kommt innerhalb der Zeichengruppe eine besondere Bedeutung zu: Steht er zwischen zwei Zeichen, definiert dies den Bereich zwischen den beiden. Steht er am Ende, so gitl er ganz normal als Bindestrich oder Minus.

Flucht ohne Clint Eastwood - Escape-Sequenzen

18. Juni 2009

Bestimmte Zeichen werden bei regulären Ausdrücken als Sonderzeichen angesehen. Diese dienen dazu, spezielle Konstrukte zu kennzeichnen. Z.B. lassen sich mit runden Klammern Ausdrücke gruppieren. Wenn man nun aber genau diese Zeichen ohne ihre Sonderbedeutung meint, so muss man diese entwerten.
Dies nennt sich dann Escape-Sequenz. Sie werden gebildet, indem Ihnen ein Backslash vorangestellt wird. D.h. folgende Auswahl von Escape-Sequenzen meint genau die Zeichen, die hinter dem Backslash stehen:

\( \) \[ \] \. \* \+ \?

Und wie beschreibt man den Backslash selbst? Ganz einfach: Durch das Escapen von sich selbst. \\ ist ein Backslash.

Alternativen regulärer Ausdrücke sind reguläre Ausdrücke

18. Juni 2009

Das klingt kompliziert, ist es aber nicht. Die Alternativen selbst sind keine regulären Ausdrücke, aber die Kombination zweier regulärer Ausdrücke als Alternative schon. Das Sonderzeichen dafür ist |. So lässt sich mit einem RegEx das eine oder das andere beschreiben. Zeit für ein Beispiel:

a|b matcht a oder b.
1|2|3 matcht 1 oder 2 oder 3.

Noch interesannter werden die Alternativen im Zusammenhang mit Gruppierungen. Auch das | musst escapet werden(\|), wenn es als Zeichen gemeint ist.

Runde Klammern gruppieren reguläre Ausdrücke

18. Juni 2009

Runde Klammern dienen dazu, reguläre Ausdrücke zu gruppieren. Somit lassen sich diese als eine Einheit verwenden. Ein Beispiel mit der Alternative:

(Tot)|(Tod) bezeichnet Tot oder Tod.

Die Zeichen werden durch das jeweilige Klammernpaar zusammengruppiert. In diesem Beispiel ließe sich aber auch anders gruppieren:

To(t|d) bedeutet dann To gefolgt von t oder d.

Beide RegEx beschreiben die selben Wörter. Besonders interessant werden Gruppierungen im Zusammenhang mit Backreferenzen.

. ist ein regulärer Ausdruck

18. Juni 2009

Wie bitte? . ist ein regulärer Ausdruck? Ja, ganz genau, der Punkt bezeichnet aber nicht den Punkt als solches, sondern jedes beliebige Zeichen. Soll er dennoch den Punkt beschreiben, so wird wieder eine Escape-Sequenz benötigt: .

. matcht also im Testtext1. wie folgt.

Testtext1.

Null, eins, viele reguläre Ausdrücke

18. Juni 2009

Richtig spannend wird es erst jetzt: Wir quantifizieren reguläre Ausdrücke. Dabei gibt es drei Operatoren: ?, +, *

  • a? Null oder ein a.
  • a+ Ein oder beliebig viele a.
  • a* Null oder beliebig viele a.

Dies lässt sich auch sehr gut mit Gruppierungen kombinieren:

(ähm)+ beschreibt ein oder beliebig viele ähm.