Post on 01-Jul-2015
description
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!