Reguläre Ausdrücke (MATSE-2010)

Preview:

DESCRIPTION

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

Citation preview

Reguläre AusdrückeTobias Gies – 06.06.2011

Fragen?

Fragen!

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

Was sind reguläre Ausdrücke?

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)

Anwendungsfälle

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

Nicht-Anwendungsfall

● Auszeichnungssprachen! Beispiele:● HTML● XML● JSON

PCRE-Syntax

Terminologie

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

Ein normaler String

Software

Mathematisch-technischer Softwareentwickler

Ein normaler String

Software

Mathematisch-technischer Softwareentwickler

Meta-Zeichen

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

Das Oder-Zeichen

(A|B)C

ACABC

Das Oder-Zeichen

(A|B)C

ACABC

Das Oder-Zeichen

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

oder direkt nach dem senkrechten Strich

Quantoren

Soft{1,2}ware

Mathematisch-technischer Softwareentwickler

Quantoren

Soft{1,2}ware

Mathematisch-technischer Softtwareentwickler

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“

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

Der Punkt

.omma

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

...

Der Punkt

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

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

Zeichenklassen

[KP-R]omma

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

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

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

Anker

ana

ananas

banane

silvana

Anker

^ana

ananas

banane

silvana

Anker

ana$

ananas

banane

silvana

Anker

● Legen fest, wo ein Treffer im Subject stehen muss

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

Klammern

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

tobias.gies@rwth-aachen.de

Klammern

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

tobias.gies@rwth-aachen.de

1: tobias.gies2: rwth-aachen

3: de

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

Rückwärtsreferenzen

([^,]+),\1

foo,bar

foo,foo

Rückwärtsreferenzen

([^,]+),\1

foo,bar

foo,foo

Rückwärtsreferenzen

● Rückbezüge auf die Treffer vorhergehender Subpatterns

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

Greediness (Gierigkeit)

<.+>

<Test><123>

Greediness (Gierigkeit)

<.+>

<Test><123>

Greediness (Gierigkeit)

<.+?>

<Test><123>

Greediness (Gierigkeit)

<.+?>

<Test><123>

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)

Wie PCRE ausgewertet werden

(A|B)C?

(A|B)C?

C?(A|B)

A|B

BA

C

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

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)

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/

Fragen?

Danke!

Recommended