150 likes | 286 Views
Einführung in Reguläre Ausdrücke. Was ist das Problem?. Beispiel: Überprüfen von HTML Dateien auf verdoppelte Worte (z.B. das das) Auch über Zeilenenden hinweg ohne Berücksichtigung von "White Space" ohne Berücksichtigung von HTML Tags (z.B. <b>sehr</b> sehr ....). Dateinamen.
E N D
Was ist das Problem? • Beispiel: • Überprüfen von HTML Dateien auf verdoppelte Worte (z.B. das das) • Auch über Zeilenenden hinweg • ohne Berücksichtigung von "White Space" • ohne Berücksichtigung von HTML Tags (z.B. <b>sehr</b> sehr ....)
Dateinamen • "Wildcards" oder "Dateiglobs" • Beispiel (MS DOS): dir 10?s*.bat • Welche Dateien werden damit gefunden? • Begrenzte Ausdrucksfähigkeit • Limitierter Problemumfang • nicht möglich: • Suche von Dateinamen beginnend mit ab gefolgt von 1 bis 4 beliebigen Zeichen und endend auf hx.txt
Reguläre Ausdrücke Elemente • Aufgebaut aus 2 Typen von Zeichen: • Metazeichen - Sonderzeichen wie z.B. "*" bei Dateinamen • Literale - alle anderen Zeichen • Muster sollen durch Metazeichen erkannt werden. • Ähnlich einer Programmiersprache • z.B. ^(From|Subject): • findet Zeilen, die mit From oder Subject beginnen und danacheinen : haben
Reguläre Ausdrücke - Beispiel • s!<EM>([0-9]+(\.[0-9]+){3})</EM>!<B>$1</B>! • Sucht IP Adressen, die von den Tags <EM> und </EM) eingerahmt sind und ersetzt den Rahmen durch <B> und </B> • Allgemeines Problem: • Ersetze Dies durch das • Ausdrücke werden aus Bausteinen aufgebaut
Verwendung von Regulären Ausdrücken • Textstücke in Dateien suchen • Texteditoren (z.B.: UltraEdit) • Unix Programm egrep • egrep optionen 'Muster' • egrep -ni '^to' x.txt y.txt • Sucht in den Dateien x.txt, y.txt nach dem Muster 'to' am Anfang jeder Zeile • ohne Berücksichtigung von Groß und Kleinschreibung und mit Ausgabe von Zeilennummern
Verwendung von Regulären Ausdrücken (Fs.) • Ergebnis: • x.txt:11:to test or verify the security of this system. During monitoring, informationx.txt:17:to monitoring of this system. Unauthorized use may subject you to criminalx.txt:22:To be or not to be is the questiony.txt:11:to test or verify the security of this system. During monitoring, informationy.txt:17:to monitoring of this system. Unauthorized use may subject you to criminaly.txt:22:To be or not to be is the question
Verwendung von Regulären Ausdrücken (Fs.) • Metazeichen (speziell - Position): • ^ .. Zeilenanfang • $ .. Zeilenende • Literale: to • Optionen: • i .. Case insensitiv • n .. Nummerierung der Zeilen • Dateinamen x.txt y.txt
Zeichenklassen • [....] Suche nach Listen von Zeichen • oder Verknüpfung aller dieser Zeichen • beliebig viele zeichen • Beispiel: 'B[iu]rma' • passt auf Birma und Burma • Beispiel: '[rR]ot' • passt auf Rotwein, rot, Protest • aber nicht auf rRot
Zeichenklassen (Fs.) • Metazeichen in Liste: • '-' von bis • Beispiel: • '<H[123456]>' erkennt die Header in HTML • '<H[1-6]>' äquivalent zu vorigem Beispiel • [a-z] .. erkennt alle Kleinbuchstaben • [a-z0-9A-Z] .. mehrere Bereiche sind zulässig • Worauf passt • '^ding$' oder '^$' oder '^' ? • '-' ist außerhalb der Zeichenklasse kein Metazeichen!
Zeichenklassen (Fs.) • Negierte Zeichenklassen • '[^...] • '[^1-6] erkennt alle Zeichen außer 1,2,3,4,5 oder 6 • 'q[^u]' .. sucht ein 'q' das nicht von einem 'u' gefolgt ist wie z.B. Iraqi. • Warum wird Qantas oder eine Zeile mit Iraq nicht gefunden? • '^' hat je nach Zusammenhang unterschiedliche Bedeutungen. (wie z.B. das Wort Hahn)
Beliebiges Zeichen / Alternation • Das Metazeichen '.' prüft auf ein beliebiges Zeichen • Beispiel '03[-./]11[-./]2005' findet beliebige Schreibweisen'03.11.2005' findet auch '03-11-1005' • Was ist der Unterschied? • Alternation - Metazeichen '|' Begrenzung der Reichweite mit ( ) • Beispiel: 'Jeffrey|Jeffery' oder 'Jeff(rey|ery)' oder 'Jeff(re|er)y' • '^From|Subject|Date:' oder '^(From|Subject|Date):' - Unterschied?
Wortgrenzen / Optionale Elemente • rot kommt auch in Protest vor • Metassequenzen • '\<' Wortanfang • (Anfang einer alphanumerischen Zeichenfolge) • '\>' Wortende • (Ende einer alphanumerischen Zeichenfolge) • Metazeichen '?' bedeutet optional • Position hinter dem gesuchten Zeichen • Was findet 'July? (fourth|4(th)?)
Wiederholungen • '+' ein oder mehr des vorausgehenden(1 .. n) • '*' beliebig viel des vorausgehenden(0 .. n) • +,*,? .. Quantifier • Beispiel: <HR SIZE=14> • <HR +SIZE *= *[0-9]+ *> • {n,m} Explizites Minimum und Maximum • Beispiel: [a-zA-Z]{1,5} - Zeichenfolge aus 1 bis 5 Alphazeichen