+ All Categories
Home > Data & Analytics > Einführung in RegEx

Einführung in RegEx

Date post: 27-Jul-2015
Category:
Upload: florian-elbers
View: 96 times
Download: 2 times
Share this document with a friend
34
RegEx-Schulung Florian Elbers
Transcript
Page 1: Einführung in RegEx

RegEx-SchulungFlorian Elbers

Page 2: Einführung in RegEx

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

Page 3: Einführung in RegEx

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.

Page 4: Einführung in RegEx

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: [email protected]

▪ Zeichenfolge gefolgt von @

▪ gefolgt von Zeichenfolge

▪ gefolgt von Punkt

▪ gefolgt von Zeichenfolge

Page 5: Einführung in RegEx

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}$

Page 6: Einführung in RegEx

Mit welchen Tools führt man ReGex aus?

▪ Textwrangler (Mac)

▪ Sublime Text (Mac)

▪ Notepad++ (Windows)

▪ VIM (Unix/Terminal)

▪ uvm.

Page 7: Einführung in RegEx

Metazeichen

▪ . beliebiges Zeichen

▪ ^ (Zeilen-)Anfang

▪ $ (Zeilen-)Ende

▪ | Alternative

▪ ( … ) Subpattern

▪ [ … ] Zeichenklassen

▪ * + ? { n,m } Quantoren

▪ \ Aufheben der Meta- Eigenschaften

▪ \.

▪ \^

▪ \$

▪ …

Übersicht

Page 8: Einführung in RegEx

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

Page 9: Einführung in RegEx

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

Page 10: Einführung in RegEx

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

Page 11: Einführung in RegEx

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

Page 12: Einführung in RegEx

Einfache Beispiele

.*

Page 13: Einführung in RegEx

Einfache Beispiele

.*

Jedes beliebige Zeichen

Page 14: Einführung in RegEx

Einfache Beispiele

.*

Jedes beliebige Zeichen

Beliebig oft (auch kein-mal)

Page 15: Einführung in RegEx

Einfache Beispiele – Alternative

(F|Ph)antasie

Text:

„Phantasie kann man auch Fantasie schreiben, aber nicht Fantasy.“

Page 16: Einführung in RegEx

Einfache Beispiele – Alternative

(F|Ph)antasie

Text:

„Phantasie kann man auch Fantasie schreiben, aber nicht Fantasy.“

Page 17: Einführung in RegEx

Einfache Beispiele – Quantoren

auto-{0,1}bild

auto-?bild

Text:

autobild

auto bild

auto-bild

Page 18: Einführung in RegEx

Einfache Beispiele – Quantoren

auto-{0,1}bild

auto-?bild

Text:

autobild

auto bild

auto-bild

Page 19: Einführung in RegEx

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

Page 20: Einführung in RegEx

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

Page 21: Einführung in RegEx

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

Page 22: Einführung in RegEx

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

Page 23: Einführung in RegEx

Einfache Beispiele – Zeichenklassen

\d+\.\d+\.\d+

Text:

11. Dezember 1980

4.10.1999

04/09/1979

01.02.2013

Page 24: Einführung in RegEx

Einfache Beispiele – Zeichenklassen

\d+\.\d+\.\d+

Text:

11. Dezember 1980

4.10.1999

04/09/1979

01.02.2013

Page 25: Einführung in RegEx

Einfache Beispiele – Postleitzahlen

^[0-9]{5}$

Text:

22767 Hamburg

1234

20251

Page 26: Einführung in RegEx

Einfache Beispiele – Postleitzahlen

^[0-9]{5}$

Text:

22767 Hamburg

1234

20251

Page 27: Einführung in RegEx

Einfache Beispiele – Postleitzahlen

^[0-9]{5}$

Nur komplette Zeile

Page 28: Einführung in RegEx

Einfache Beispiele – Postleitzahlen

^[0-9]{5}$

Nur komplette Zeile

Ziffern von 0 bis 9

Page 29: Einführung in RegEx

Einfache Beispiele – Postleitzahlen

^[0-9]{5}$

Nur komplette Zeile

Ziffern von 0 bis 9

Genau 5 Stück

Page 30: Einführung in RegEx

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>

Page 31: Einführung in RegEx

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>

Page 32: Einführung in RegEx

Fortgeschrittene Beispiele

http://www.computerbild.de/sitemap-glossar.xml

To Do:

Bekommen aller Keywords der Glossarseiten aus den URLs

Page 33: Einführung in RegEx

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

Page 34: Einführung in RegEx

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/phpwcms/index.php?id=4,0,0,1,0,0

▪ http://regexcrossword.com/


Recommended