45
Reguläre Ausdrücke Tobias Gies – 06.06.2011

Reguläre Ausdrücke (MATSE-2010)

Embed Size (px)

DESCRIPTION

This presentation was given at RWTH Aachen University on 2011-06-06 as a social credits project.

Citation preview

Page 1: Reguläre Ausdrücke (MATSE-2010)

Reguläre AusdrückeTobias Gies – 06.06.2011

Page 2: Reguläre Ausdrücke (MATSE-2010)

Fragen?

Page 3: Reguläre Ausdrücke (MATSE-2010)

Fragen!

Page 4: Reguläre Ausdrücke (MATSE-2010)

\b[A-Z0-9._%+-]+@[A-Z0-9.-]+\.[A-Z]{2,4}\b

Was sind reguläre Ausdrücke?

Page 5: Reguläre Ausdrücke (MATSE-2010)

Was sind reguläre Ausdrücke?

● „Regex“ (Regular Expressions)● Hier speziell: Perl-kompatible reguläre

Ausdrücke (PCRE)● „Zeichenkette, die der Beschreibung von

Mengen bzw. Untermengen von Zeichenketten mit Hilfe bestimmer syntaktischer Regeln dient“ (Wikipedia: Regulärer Ausdruck, Stand 2011-05-22)

Page 6: Reguläre Ausdrücke (MATSE-2010)

Anwendungsfälle

● Validierung und Filterung von Benutzereingaben● Durchsuchen von großen Datenmengen● Trenner zur Aufteilung von Textdaten

Page 7: Reguläre Ausdrücke (MATSE-2010)

Nicht-Anwendungsfall

● Auszeichnungssprachen! Beispiele:● HTML● XML● JSON

Page 8: Reguläre Ausdrücke (MATSE-2010)

PCRE-Syntax

Page 9: Reguläre Ausdrücke (MATSE-2010)

Terminologie

● Suchmuster („Pattern“)● Durchsuchte Zeichenkette („Subject“)● Treffer („Match“)

Page 10: Reguläre Ausdrücke (MATSE-2010)

Ein normaler String

Software

Mathematisch-technischer Softwareentwickler

Page 11: Reguläre Ausdrücke (MATSE-2010)

Ein normaler String

Software

Mathematisch-technischer Softwareentwickler

Page 12: Reguläre Ausdrücke (MATSE-2010)

Meta-Zeichen

[So]f.*twa\dr{1,4}e

Page 13: Reguläre Ausdrücke (MATSE-2010)

Das Oder-Zeichen

(A|B)C

ACABC

Page 14: Reguläre Ausdrücke (MATSE-2010)

Das Oder-Zeichen

(A|B)C

ACABC

Page 15: Reguläre Ausdrücke (MATSE-2010)

Das Oder-Zeichen

● Syntax: A|B● Bedeutung: Entweder das Zeichen direkt vor

oder direkt nach dem senkrechten Strich

Page 16: Reguläre Ausdrücke (MATSE-2010)

Quantoren

Soft{1,2}ware

Mathematisch-technischer Softwareentwickler

Page 17: Reguläre Ausdrücke (MATSE-2010)

Quantoren

Soft{1,2}ware

Mathematisch-technischer Softtwareentwickler

Page 18: Reguläre Ausdrücke (MATSE-2010)

Quantoren

● Syntax: {min,max}● Beziehen sich immer auf das vorhergehende

Zeichen / das vorhergehende Subpattern● Höchstzahl kann weggelassen werden: {2,}

steht für „zwei oder mehr“

Page 19: Reguläre Ausdrücke (MATSE-2010)

Quantoren

● Für oft benötigte Quantoren gibt es Kurzformen● ? – Gar nicht oder genau einmal – entspricht {0,1}● + – Mindestens einmal, beliebig oft – entspricht {1,}● * – Gar nicht oder beliebig oft – entspricht {0,}

Page 20: Reguläre Ausdrücke (MATSE-2010)

Der Punkt

.omma

Ohne Punkt und KommaOhne Punkt und SommaOhne Punkt und _ommaOhne Punkt und 0omma

...

Page 21: Reguläre Ausdrücke (MATSE-2010)

Der Punkt

● Steht für ein beliebiges Zeichen● Soll nach dem Zeichen „.“ gesucht werden,

muss im Suchmuster ein Backslash vor den Punkt gestellt werden: \.

Page 22: Reguläre Ausdrücke (MATSE-2010)

Zeichenklassen

[KP-R]omma

Ohne Punkt und KommaOhne Punkt und PommaOhne Punkt und QommaOhne Punkt und Romma

Page 23: Reguläre Ausdrücke (MATSE-2010)

Zeichenklassen

● Format: [Zeichen]● Beschreibt eine Zeichenmenge, aus der das

betroffene Zeichen stammen soll● Bindestrich für Zeichenbereiche: [a-zA-Z]● Zirkumflex negiert die Zeichenklasse: [^0-9]

trifft alles, was keine Ziffer ist

Page 24: Reguläre Ausdrücke (MATSE-2010)

Zeichenklassen

● Es gibt jede Menge vordefinierte Zeichenklassen. Beispiele:● \d – Ziffern von 0 bis 9 – entspricht [0-9]● \s – Sämtlicher Leerraum (Whitespace)

● Großbuchstabe negiert die Zeichenklasse: \D trifft alles, was keine Ziffer ist

Page 25: Reguläre Ausdrücke (MATSE-2010)

Anker

ana

ananas

banane

silvana

Page 26: Reguläre Ausdrücke (MATSE-2010)

Anker

^ana

ananas

banane

silvana

Page 27: Reguläre Ausdrücke (MATSE-2010)

Anker

ana$

ananas

banane

silvana

Page 28: Reguläre Ausdrücke (MATSE-2010)

Anker

● Legen fest, wo ein Treffer im Subject stehen muss

● ^ - Nur am Anfang des Subject● $ - nur am Ende des Subject

Page 29: Reguläre Ausdrücke (MATSE-2010)

Klammern

(.+)@([^.]+)\.([a-z]{2,})

[email protected]

Page 30: Reguläre Ausdrücke (MATSE-2010)

Klammern

(.+)@([^.]+)\.([a-z]{2,})

[email protected]

1: tobias.gies2: rwth-aachen

3: de

Page 31: Reguläre Ausdrücke (MATSE-2010)

Klammern

● Gruppieren das Suchmuster in Subpatterns● Auf das, was die Subpatterns jeweils treffen,

kann später einzeln zugegriffen werden (die Subpatterns werden anhand ihrer Position im Suchmuster durchnummeriert)

● Quantoren können auch auf Subpatterns angewandt werden: (Oha)+ trifft OhaOhaOha...

● Das gleiche gilt auch für das Oder-Zeichen

Page 32: Reguläre Ausdrücke (MATSE-2010)

Rückwärtsreferenzen

([^,]+),\1

foo,bar

foo,foo

Page 33: Reguläre Ausdrücke (MATSE-2010)

Rückwärtsreferenzen

([^,]+),\1

foo,bar

foo,foo

Page 34: Reguläre Ausdrücke (MATSE-2010)

Rückwärtsreferenzen

● Rückbezüge auf die Treffer vorhergehender Subpatterns

● Verweis auf die Subpatterns mit einem Backslash und ihrer Nummer: \1, \2, etc...

Page 35: Reguläre Ausdrücke (MATSE-2010)

Greediness (Gierigkeit)

<.+>

<Test><123>

Page 36: Reguläre Ausdrücke (MATSE-2010)

Greediness (Gierigkeit)

<.+>

<Test><123>

Page 37: Reguläre Ausdrücke (MATSE-2010)

Greediness (Gierigkeit)

<.+?>

<Test><123>

Page 38: Reguläre Ausdrücke (MATSE-2010)

Greediness (Gierigkeit)

<.+?>

<Test><123>

Page 39: Reguläre Ausdrücke (MATSE-2010)

Greediness (Gierigkeit)

● Reguläre Ausdrücke sind standardmäßig gierig!● Gierigkeit kann ausgeschaltet werden:

● Für einzelne Quantoren durch nachgestelltes ?● Für den ganzen Ausdruck (je nach

Programmiersprache auf unterschiedliche Weise)

Page 40: Reguläre Ausdrücke (MATSE-2010)

Wie PCRE ausgewertet werden

(A|B)C?

(A|B)C?

C?(A|B)

A|B

BA

C

Page 41: Reguläre Ausdrücke (MATSE-2010)

Nutzung in Programmiersprachen● Regex werden in vielen Programmiersprachen

als Strings eingegeben.● Backslashes bedürfen daher einiger

Aufmerksamkeit● Beispiel: Um nach einem Backslash in einem

Subject zu suchen, müssen vier Backslashes im Programmcode geschrieben werden

● Davon kommen zwei bei der Regex-Engine an● Diese erkennt das Suchmuster \\ und sucht

nach einem Backslash

Page 42: Reguläre Ausdrücke (MATSE-2010)

Nutzung in Java

● Validierung / Filterung / Suche: Klassen aus dem Paket java.util.regex:Pattern p = Pattern.compile("a*b");Matcher m = p.matcher("aaaaab");boolean b = m.matches();

● Trennung: String.split(String regex)

Page 43: Reguläre Ausdrücke (MATSE-2010)

Weiteres Material und Hilfsmittel

● Jeffrey Friedl: Reguläre Ausdrücke (3. Aufl.)O'Reilly 2007, ISBN 978-3-89721-720-1

● Tony Stubblebine: Reguläre Ausdrücke – kurz und gut (2. Aufl.)O'Reilly 2007, ISBN 978-3-89721-535-1

● The Regex Coach: Windows-Programm zum interaktiven experimentieren mit regulären Ausdrücken. http://weitz.de/regex-coach/

Page 44: Reguläre Ausdrücke (MATSE-2010)

Fragen?

Page 45: Reguläre Ausdrücke (MATSE-2010)

Danke!