Einführung in RegEx
Florian Elbers
Definition und Nutzen
▪ Reguläre Ausdrücke (Englisch: regular
expressions, abgekürzt RegExp oder
Regex) bezeichnen genau definierte
Suchmuster, mit deren Hilfe sich in einer
Zeichenkette bestimmte Inhalte suchen
und bei Bedarf ersetzen lassen
▪ z. B.: „Suche nach allen Wörtern, die mit
einem großen D anfangen und mehr als
drei Buchstaben enthalten“
▪ => RegEx ersparen viel Arbeit und Zeit
▪ => RegEx erweitern den eigenen
Handlungsspielraum
Wann brauchen wir RegEx?
▪ Validierung und Filterung von Benutzereingaben, z. B. Spamfilter
▪ Durchsuchen von großen Datenmengen
▪ Aufteilung von Textdaten
▪ Konkretisieren von Abfragen, z. B. in Google Analytics
▪ uvm.
Was können Muster sein?
▪ Deutsche Postleitzahlen: D-27321
▪ D gefolgt von Bindestrich/Leerzeichen
▪ gefolgt von 5 Ziffern
▪ ISBN-Nummer: 978-3-442-54631-2
▪ 3 Ziffern (entweder 978 oder 979)
▪ gefolgt von einem Bindestrich
▪ gefolgt von 1 bis 5 Ziffern …
▪ Emailadresse: jemand@irgendwo.de
▪ Zeichenfolge gefolgt von @
▪ gefolgt von Zeichenfolge
▪ gefolgt von Punkt
▪ gefolgt von Zeichenfolge
Wie sieht so eine RegEx aus?
▪ copy *.doc c:temp
▪ /D{4}d{4}.tif/gi
▪ ^[+-]?(d+.d+|d+.|.d+|d+)([eE]
[+-]?d+)?$
▪ ^[a-zA-Z0-9][w.-]*@(?:[a-zA-Z0-9]
[a-zA-Z0-9_-]+.)+[A-Z,a-z]{2,5}$
Mit welchen Tools führt man ReGex aus?
▪ Textwrangler (Mac)
▪ Sublime Text (Mac)
▪ Notepad++ (Windows)
▪ VIM (Unix/Terminal)
▪ uvm.
Metazeichen
▪ . beliebiges Zeichen
▪ ^ (Zeilen-)Anfang
▪ $ (Zeilen-)Ende
▪ | Alternative
▪ ( … ) Subpattern
▪ [ … ] Zeichenklassen
▪ * + ? { n,m } Quantoren
▪  Aufheben der Meta- Eigenschaften
▪ .
▪ ^
▪ $
▪ …
Übersicht
Zeichenklassen
▪ Eckige Klammern finden in regulären Ausdrücken
Verwendung um eine Zeichenauswahl festzulegen
▪ [abc] Buchstabe a,b oder c
▪ [a-zA-Z0-9] alphanumerisches Zeichen
▪ [^a-zA-Z0-9] alles außer alphanumerischem Zeichen
▪ Vordefinierte Zeichenklassen
▪ d Zahl
▪ D keine Zahl
▪ w Wort
▪ W kein Wort
▪ s Whitespace
▪ s kein Whitespace
▪ t Tabulator
▪ r Zeilenumbruch
Typen
Quantoren
▪ Quantoren bzw. geschweifte Klammern dienen in
regulären Ausdrücken dazu eine Anzahl
festzulegen, also wie oft ein bestimmtes Zeichen
oder ein erlaubter Zeichenbereich vorkommen darf,
oder muss
▪ ? vorang. Ausdruck optional {0,1}
▪ + vorang. Ausdruck mindestens einmal {1,}
▪ * vorang. Ausdruck beliebig oft {0,}
▪ { min , max }
▪ { n } vor. Ausdruck exakt n-mal
▪ {, max } vor. Ausdruck maximal max-mal
▪ { min ,} vor. Ausdruck mindestens min-mal
Typen
Einstiegsbeispiel
▪ ^D[a-z]*i$
▪ Dieser reguläre Ausdruck ist wie folgt zu verstehen:
▪ ^ steht für den Beginn des Strings, d. h. der String muss mit einem großen D beginnen (keine Zeichen davor)
▪ $ steht für das Ende des Strings, es dürfen also keine Zeichen hinter dem kleinen i kommen.
▪ Innerhalb der eckigen Klammern wird eine Zeichengruppe angegeben, in diesem Beispiel sind alle Zeichen von a bis z (in
Kleinbuchstaben) erlaubt
▪ Das Sternchen (*) steht für beliebiges Vorkommen des zuvor definierten Wertes. In unserem Beispiel darf also nach dem
großen D beliebig oft ein Zeichen aus der Menge a bis z vorkommen.
▪ Welche Eingaben sind damit erlaubt?
▪ DelphiXE - Nein, weil der String mit einem kleinen i enden muss
▪ Del-phi - Nein, weil zwischen D und i nur Kleinbuchstaben stehen dürfen und keine Bindestriche
▪ Delphi - korrekt
Weitere Einstiegsbeispiele
▪ Leerzeilen löschen:
▪ r+ durch r ersetzen
▪ Datum umformatieren:
▪ 01.02.1900 zu 1900-02-01
▪ (d{2}).(d{2}).(d{4}) durch 3-2-1 ersetzen
▪ Bestimmte Dateien aus der Liste löschen:
▪ *.(jpg|jpeg|css|js)
▪ Liste von AuBi-Artikel-URLs => ID rausfiltern
▪ http://www.autobild.de/artikel/fahrbericht-mercedes-benz-s-320-cdi-53622.html
▪ ^(.*?)-(d+).html ersetzen mit 2
Einfache Beispiele
.*
Einfache Beispiele
.*
Jedes beliebige Zeichen
Einfache Beispiele
.*
Jedes beliebige Zeichen
Beliebig oft (auch kein-mal)
Einfache Beispiele – Alternative
(F|Ph)antasie
Text:
„Phantasie kann man auch Fantasie schreiben, aber nicht Fantasy.“
Einfache Beispiele – Alternative
(F|Ph)antasie
Text:
„Phantasie kann man auch Fantasie schreiben, aber nicht Fantasy.“
Einfache Beispiele – Quantoren
auto-{0,1}bild
auto-?bild
Text:
autobild
auto bild
auto-bild
Einfache Beispiele – Quantoren
auto-{0,1}bild
auto-?bild
Text:
autobild
auto bild
auto-bild
Einfache Beispiele – Zeichenklassen
[KP-R]omma
Text:
Ohne Punkt und Komma
Ohne Punkt und Pomma
Ohne Punkt und Qomma
Ohne Punkt und Romma
Ohne Punkt und Somma
Einfache Beispiele – Zeichenklassen
[KP-R]omma
Text:
Ohne Punkt und Komma
Ohne Punkt und Pomma
Ohne Punkt und Qomma
Ohne Punkt und Romma
Ohne Punkt und Somma
Einfache Beispiele – Negation mit Zirkumflex
[^K]omma
Text:
Ohne Punkt und Komma
Ohne Punkt und Pomma
Ohne Punkt und Qomma
Ohne Punkt und Romma
Ohne Punkt und Somma
Einfache Beispiele – Negation mit Zirkumflex
[^K]omma
Text:
Ohne Punkt und Komma
Ohne Punkt und Pomma
Ohne Punkt und Qomma
Ohne Punkt und Romma
Ohne Punkt und Somma
Einfache Beispiele – Zeichenklassen
d+.d+.d+
Text:
11. Dezember 1980
4.10.1999
04/09/1979
01.02.2013
Einfache Beispiele – Zeichenklassen
d+.d+.d+
Text:
11. Dezember 1980
4.10.1999
04/09/1979
01.02.2013
Einfache Beispiele – Postleitzahlen
^[0-9]{5}$
Text:
22767 Hamburg
1234
20251
Einfache Beispiele – Postleitzahlen
^[0-9]{5}$
Text:
22767 Hamburg
1234
20251
Einfache Beispiele – Postleitzahlen
^[0-9]{5}$
Nur komplette Zeile
Einfache Beispiele – Postleitzahlen
^[0-9]{5}$
Nur komplette Zeile
Ziffern von 0 bis 9
Einfache Beispiele – Postleitzahlen
^[0-9]{5}$
Nur komplette Zeile
Ziffern von 0 bis 9
Genau 5 Stück
Einfache Beispiele – HTML-Tags
<title>(.*?)</title>
Text:
<title>COMPUTER BILD: Tests, Downloads, Ratgeber & Kurse</title>
<title class=„title“>COMPUTER BILD: Tests, Downloads, Ratgeber & Kurse</title>
<title><b>COMPUTER BILD: Tests, Downloads, Ratgeber & Kurse</b></title>
Einfache Beispiele – HTML-Tags
<title>(.*?)</title>
Text:
<title>COMPUTER BILD: Tests, Downloads, Ratgeber & Kurse</title>
<title class=„title“>COMPUTER BILD: Tests, Downloads, Ratgeber & Kurse</title>
<title><b>COMPUTER BILD: Tests, Downloads, Ratgeber & Kurse</b></title>
Fortgeschrittene Beispiele
http://www.computerbild.de/sitemap-
glossar.xml
To Do:
Bekommen aller Keywords der Glossarseiten aus den URLs
Fortgeschrittene Beispiele
http://www.computerbild.de/sitemap-
glossar.xml
To Do:
Bekommen aller Keywords der Glossarseiten aus den URLs
^http://www.computerbild.de/glossar/(.*?)-d+.html ersetzen durch 1
Wer mehr über RegEx wissen möchte
▪ http://www.mediaevent.de/javascript/
Javascript-Regulaere-Ausdruecke-
1.html
▪ http://www.danielfett.de/internet-und-
opensource,artikel,regulaere-
ausdruecke
▪ http://www.regenechsen.de/phpwcm
s/index.php?id=4,0,0,1,0,0
▪ http://regexcrossword.com/

Einführung in RegEx

  • 1.
  • 2.
    Definition und Nutzen ▪Reguläre Ausdrücke (Englisch: regular expressions, abgekürzt RegExp oder Regex) bezeichnen genau definierte Suchmuster, mit deren Hilfe sich in einer Zeichenkette bestimmte Inhalte suchen und bei Bedarf ersetzen lassen ▪ z. B.: „Suche nach allen Wörtern, die mit einem großen D anfangen und mehr als drei Buchstaben enthalten“ ▪ => RegEx ersparen viel Arbeit und Zeit ▪ => RegEx erweitern den eigenen Handlungsspielraum
  • 3.
    Wann brauchen wirRegEx? ▪ Validierung und Filterung von Benutzereingaben, z. B. Spamfilter ▪ Durchsuchen von großen Datenmengen ▪ Aufteilung von Textdaten ▪ Konkretisieren von Abfragen, z. B. in Google Analytics ▪ uvm.
  • 4.
    Was können Mustersein? ▪ Deutsche Postleitzahlen: D-27321 ▪ D gefolgt von Bindestrich/Leerzeichen ▪ gefolgt von 5 Ziffern ▪ ISBN-Nummer: 978-3-442-54631-2 ▪ 3 Ziffern (entweder 978 oder 979) ▪ gefolgt von einem Bindestrich ▪ gefolgt von 1 bis 5 Ziffern … ▪ Emailadresse: jemand@irgendwo.de ▪ Zeichenfolge gefolgt von @ ▪ gefolgt von Zeichenfolge ▪ gefolgt von Punkt ▪ gefolgt von Zeichenfolge
  • 5.
    Wie sieht soeine RegEx aus? ▪ copy *.doc c:temp ▪ /D{4}d{4}.tif/gi ▪ ^[+-]?(d+.d+|d+.|.d+|d+)([eE] [+-]?d+)?$ ▪ ^[a-zA-Z0-9][w.-]*@(?:[a-zA-Z0-9] [a-zA-Z0-9_-]+.)+[A-Z,a-z]{2,5}$
  • 6.
    Mit welchen Toolsführt man ReGex aus? ▪ Textwrangler (Mac) ▪ Sublime Text (Mac) ▪ Notepad++ (Windows) ▪ VIM (Unix/Terminal) ▪ uvm.
  • 7.
    Metazeichen ▪ . beliebigesZeichen ▪ ^ (Zeilen-)Anfang ▪ $ (Zeilen-)Ende ▪ | Alternative ▪ ( … ) Subpattern ▪ [ … ] Zeichenklassen ▪ * + ? { n,m } Quantoren ▪ Aufheben der Meta- Eigenschaften ▪ . ▪ ^ ▪ $ ▪ … Übersicht
  • 8.
    Zeichenklassen ▪ Eckige Klammernfinden in regulären Ausdrücken Verwendung um eine Zeichenauswahl festzulegen ▪ [abc] Buchstabe a,b oder c ▪ [a-zA-Z0-9] alphanumerisches Zeichen ▪ [^a-zA-Z0-9] alles außer alphanumerischem Zeichen ▪ Vordefinierte Zeichenklassen ▪ d Zahl ▪ D keine Zahl ▪ w Wort ▪ W kein Wort ▪ s Whitespace ▪ s kein Whitespace ▪ t Tabulator ▪ r Zeilenumbruch Typen
  • 9.
    Quantoren ▪ Quantoren bzw.geschweifte Klammern dienen in regulären Ausdrücken dazu eine Anzahl festzulegen, also wie oft ein bestimmtes Zeichen oder ein erlaubter Zeichenbereich vorkommen darf, oder muss ▪ ? vorang. Ausdruck optional {0,1} ▪ + vorang. Ausdruck mindestens einmal {1,} ▪ * vorang. Ausdruck beliebig oft {0,} ▪ { min , max } ▪ { n } vor. Ausdruck exakt n-mal ▪ {, max } vor. Ausdruck maximal max-mal ▪ { min ,} vor. Ausdruck mindestens min-mal Typen
  • 10.
    Einstiegsbeispiel ▪ ^D[a-z]*i$ ▪ Dieserreguläre Ausdruck ist wie folgt zu verstehen: ▪ ^ steht für den Beginn des Strings, d. h. der String muss mit einem großen D beginnen (keine Zeichen davor) ▪ $ steht für das Ende des Strings, es dürfen also keine Zeichen hinter dem kleinen i kommen. ▪ Innerhalb der eckigen Klammern wird eine Zeichengruppe angegeben, in diesem Beispiel sind alle Zeichen von a bis z (in Kleinbuchstaben) erlaubt ▪ Das Sternchen (*) steht für beliebiges Vorkommen des zuvor definierten Wertes. In unserem Beispiel darf also nach dem großen D beliebig oft ein Zeichen aus der Menge a bis z vorkommen. ▪ Welche Eingaben sind damit erlaubt? ▪ DelphiXE - Nein, weil der String mit einem kleinen i enden muss ▪ Del-phi - Nein, weil zwischen D und i nur Kleinbuchstaben stehen dürfen und keine Bindestriche ▪ Delphi - korrekt
  • 11.
    Weitere Einstiegsbeispiele ▪ Leerzeilenlöschen: ▪ r+ durch r ersetzen ▪ Datum umformatieren: ▪ 01.02.1900 zu 1900-02-01 ▪ (d{2}).(d{2}).(d{4}) durch 3-2-1 ersetzen ▪ Bestimmte Dateien aus der Liste löschen: ▪ *.(jpg|jpeg|css|js) ▪ Liste von AuBi-Artikel-URLs => ID rausfiltern ▪ http://www.autobild.de/artikel/fahrbericht-mercedes-benz-s-320-cdi-53622.html ▪ ^(.*?)-(d+).html ersetzen mit 2
  • 12.
  • 13.
  • 14.
    Einfache Beispiele .* Jedes beliebigeZeichen Beliebig oft (auch kein-mal)
  • 15.
    Einfache Beispiele –Alternative (F|Ph)antasie Text: „Phantasie kann man auch Fantasie schreiben, aber nicht Fantasy.“
  • 16.
    Einfache Beispiele –Alternative (F|Ph)antasie Text: „Phantasie kann man auch Fantasie schreiben, aber nicht Fantasy.“
  • 17.
    Einfache Beispiele –Quantoren auto-{0,1}bild auto-?bild Text: autobild auto bild auto-bild
  • 18.
    Einfache Beispiele –Quantoren auto-{0,1}bild auto-?bild Text: autobild auto bild auto-bild
  • 19.
    Einfache Beispiele –Zeichenklassen [KP-R]omma Text: Ohne Punkt und Komma Ohne Punkt und Pomma Ohne Punkt und Qomma Ohne Punkt und Romma Ohne Punkt und Somma
  • 20.
    Einfache Beispiele –Zeichenklassen [KP-R]omma Text: Ohne Punkt und Komma Ohne Punkt und Pomma Ohne Punkt und Qomma Ohne Punkt und Romma Ohne Punkt und Somma
  • 21.
    Einfache Beispiele –Negation mit Zirkumflex [^K]omma Text: Ohne Punkt und Komma Ohne Punkt und Pomma Ohne Punkt und Qomma Ohne Punkt und Romma Ohne Punkt und Somma
  • 22.
    Einfache Beispiele –Negation mit Zirkumflex [^K]omma Text: Ohne Punkt und Komma Ohne Punkt und Pomma Ohne Punkt und Qomma Ohne Punkt und Romma Ohne Punkt und Somma
  • 23.
    Einfache Beispiele –Zeichenklassen d+.d+.d+ Text: 11. Dezember 1980 4.10.1999 04/09/1979 01.02.2013
  • 24.
    Einfache Beispiele –Zeichenklassen d+.d+.d+ Text: 11. Dezember 1980 4.10.1999 04/09/1979 01.02.2013
  • 25.
    Einfache Beispiele –Postleitzahlen ^[0-9]{5}$ Text: 22767 Hamburg 1234 20251
  • 26.
    Einfache Beispiele –Postleitzahlen ^[0-9]{5}$ Text: 22767 Hamburg 1234 20251
  • 27.
    Einfache Beispiele –Postleitzahlen ^[0-9]{5}$ Nur komplette Zeile
  • 28.
    Einfache Beispiele –Postleitzahlen ^[0-9]{5}$ Nur komplette Zeile Ziffern von 0 bis 9
  • 29.
    Einfache Beispiele –Postleitzahlen ^[0-9]{5}$ Nur komplette Zeile Ziffern von 0 bis 9 Genau 5 Stück
  • 30.
    Einfache Beispiele –HTML-Tags <title>(.*?)</title> Text: <title>COMPUTER BILD: Tests, Downloads, Ratgeber & Kurse</title> <title class=„title“>COMPUTER BILD: Tests, Downloads, Ratgeber & Kurse</title> <title><b>COMPUTER BILD: Tests, Downloads, Ratgeber & Kurse</b></title>
  • 31.
    Einfache Beispiele –HTML-Tags <title>(.*?)</title> Text: <title>COMPUTER BILD: Tests, Downloads, Ratgeber & Kurse</title> <title class=„title“>COMPUTER BILD: Tests, Downloads, Ratgeber & Kurse</title> <title><b>COMPUTER BILD: Tests, Downloads, Ratgeber & Kurse</b></title>
  • 32.
  • 33.
    Fortgeschrittene Beispiele http://www.computerbild.de/sitemap- glossar.xml To Do: Bekommenaller Keywords der Glossarseiten aus den URLs ^http://www.computerbild.de/glossar/(.*?)-d+.html ersetzen durch 1
  • 34.
    Wer mehr überRegEx wissen möchte ▪ http://www.mediaevent.de/javascript/ Javascript-Regulaere-Ausdruecke- 1.html ▪ http://www.danielfett.de/internet-und- opensource,artikel,regulaere- ausdruecke ▪ http://www.regenechsen.de/phpwcm s/index.php?id=4,0,0,1,0,0 ▪ http://regexcrossword.com/