Reguläre Ausdrucke in Oracle leicht gemacht

Was ist ein regulärer Ausdruck?

Ein regulärer Ausdruck (auch regex oder regexp genannt) ist eine Folge von Zeichen, die ein Textmuster beschreibt.

Reguläre Ausdrücke

Einige Beispiele für reguläre Ausdrücke:

m..s – Ein Punkt steht für ein einzelnes beliebiges Zeichen. Dieser reguläre Ausdruck wird bei Wörter matchen, die mit einem „m“ beginnen, mit einem „s“ enden und aus fünf Buchstaben bestehen.

So beschreibt folgender regulärer Ausdruck Wörter wie „maus“, „mais“, „mars“ nicht aber „mama“, „mond“ usw.

m*s – Der Stern * bedeutet, dass der Ausdruck vor dem Stern kein oder mehrmals in dem gesamten Ausdruck vorkommen kann. So beschreibt dieser Textmuster Zeichenfolgen wie: ms, mms, mmms und so weiter, aber nicht die Zeichenfolge wie mss, mts, usw.

Eine folständige Liste der Operatoren der regülären Ausdrücke in Oracle findet man in der Oracle Dokumentation unter Using Regular Expressions in Database Applications

Welche Rolle spielen reguläre Ausdrücke in Oracle

Reguläre Ausdrücke sind ein mächtiges Werkzeug für die Textsuche nach einem bestimmten Muster. Man würde behaupten, es gibt doch so was wie LIKE in SQL-Abfragen. Das ist aber in vielen Fällen nicht ausreichend. Mit LIKE bekommt man alle Telefonnummern, die eine Nummernfolge „456“ enthält, aber kriegt man damit auch alle Telefonnummern die ein Format wie zum Beispiel „(+DD) DDD DDD-DDDD“ haben?

Das funktioniert mit LIKE nicht. Zumindest nicht so einfach und intuitiv wie mit einem regulären Ausdruck. Lass uns anschauen wie das geht.

Beispiel: Validierung der Kontaktdaten

Nehmen wir eine einfache Tabelle, die Usernamen, Emails und Telefon speichert.

Nun wollen wir aus der Tabelle nur User selektieren, die eine Telefonnummer im folgendem Format haben: „(+DD) DDD DDD-DDDD“.
Wie man sieht, sind das nur drei User, peter, alex und max. Die zwei anderen weichen vom gewünschten Format ab.

Um genau diese User ermitteln zu können, müssen wir uns ein regexpr überlegen. Eine Zahl kann in einem Regulären Ausdruck auf unterschiedliche Art und Weise dargestellt werden.
Mir sind folgende drei Varianten bekannt:

  • \d
  • [:digit:]
  • [0-9]

Das n-fache Vorkommen einzelner Zahlen wird durch die Anzahl in geschweiften Klammern dargestellt. Also für die Zahl 123 sehe der Ausdruck wie folgt aus: \d{3}.

Um die Klammern und das Plus-Zeichen matchen zu können, muss ein Escape-Zeichen(auch maskieren gennant) \ verwendet werden. Vergisst man die Klammern zu maskieren, so werden die als Gruppierung-Ausdruck interpretiert.

Zum Schluss sagen wir noch, dass die Telefonnummer in einem von uns definierten Format sein soll und nicht anders. Dies wird erreicht, in dem das gesamte Ausdruckzwischen ^ und $ gesetzt wird.
^– definiert Zeilenanfang und $ dasEnde einer Zeile.

Zusammengefasst sieht unser regulärer Ausdruck wie folgt aus: ^\(\+\d{2}\) \d{3} \d{3}-\d{4}$. Diesen können wir jetzt in unserer Abfrage verwenden:

Das wars auch zum Thema Reguläre Ausdrücke. Für Fragen stehe ich gerne zur Verfügung.

Weitere Links:

Kommentar verfassen