Perl-Praxis.

Ähnliche Dokumente
Perl-Praxis. Jörn Clausen

Perl-Praxis.

Perl-Praxis. Jörn Clausen

Perl-Praxis. Madis Rumming Jan Krüger

Perl-Praxis. Reguläre Ausdrücke. Madis Rumming Jan Krüger.

Reguläre Ausdrücke IDE AUTUMN SCHOOL

Komplexe Datenstrukturen

Propädeutikum Programmierung in der Bioinformatik

Regular expressions for pros Reguläre Ausdrücke für Fortgeschrittene (Perl) Elena Neuburg

Perl-Praxis. Kontrollstrukturen. Jörn Clausen

Perl-Praxis. Dateien und Daten. Jörn Clausen

Stream EDitor SED und Reguläre Ausdrücke

(Prüfungs-)Aufgaben zu formale Sprachen

Einführung in PERL 2 Reguläre Ausdrücke

Reguläre Ausdrücke. Felix Döring, Felix Wittwer 14. November Python-Kurs

Perl-Praxis. Kontrollstrukturen. Jörn Clausen Daniel Hagemeier, Jan Krüger

UNIX Power Tools. Helferlein für den Alltag. Maximilian Haupt

Proseminar UNIX Tools. Ferdinand Beyer

Öffnen einer Datei. Programm mit einer Fehlermeldung beendet. open( IN, "datei.txt" ) or die( "open-fail: $!" );

Reguläre Ausdrücke Suchmuster, Pattern Matching

15 Der AWK. (Aho, Weinberger, Kernighan)

Übersicht. Einführung in Perl Mustersuche III/ Datentypen II. Mehrzeiliges Matching (1) Mehrzeiliges Matching (2) chomp

Übersicht. Einführung in Perl Operatoren - Richtigstellung Mustersuche II. Richtigstellung Operatoren (2) Richtigstellung Operatoren (1)

Informationsextraktion Materialien zur Vorlesung

Linux II. Reguläre Ausdrücke Editoren Scripting. 2 Linux II. Linux I II III Res WN/TT NLTK XML Weka E Reguläre Ausdrücke Editoren Scripting

XML Extensible Markup Language

Ein- und Ausgabeumlenkung

Komplexe Datenstrukturen

Übersicht PERL. !!!! Wichtig: Nach dem Befehl einem Strichpunkt setzen!!!!

Reguläre Ausdrücke. Silke Trißl Wissensmanagement in der Bioinformatik

/ Vortrag Unix-AG

Webengineering. Reguläre Ausdrücke. Dienstag, 2. Juli 13

Was bisher geschah: Formale Sprachen

Reguläre Ausdrücke. Silke Trißl, Prof. Ulf Leser Wissensmanagement in der Bioinformatik

Arithmetik in der tcsh

Linux I II III Res/Pro WN/TT Reguläre Ausdrücke Editoren Scripting. Linux II. 2 Linux II. Reguläre Ausdrücke Editoren Scripting. Ressourcen-Vorkurs

Komplexe Datenstrukturen

Komplexe Datenstrukturen

Perl-Praxis. Dateien und Daten. Jörn Clausen Jens Reeder, Jan Krüger

Teil VII. Scientific Computing in Computer Science, Technische Universität München

Perl-Praxis. Einführung. Jörn Clausen Daniel Hagemeier, Jan Krüger.

Perl-Praxis. Dateien und Daten. Jörn Clausen Daniel Hagemeier, Jan Krüger

XML Extensible Markup Language

Kommandozeileneingabe. Einführung in Perl Kommandozeileneingabe etc. Kommandozeileneingabe Optionen. Kommandozeileneingabe Bsp (1)

Perl-Praxis. Einführung. Jörn Clausen, Jan Krüger Jens Reeder, Alex Sczyrba. AG Praktische Informatik Technische Fakultät Universität Bielefeld

Reguläre Ausdrücke mit Java

Definition 4 (Operationen auf Sprachen) Beispiel 5. Seien A, B Σ zwei (formale) Sprachen. Konkatenation: AB = {uv ; u A, v B} A + = n 1 An

Perl-Praxis. Dateien und Daten. Jörn Clausen, Jan Krüger Jens Reeder, Alex Sczyrba. AG Praktische Informatik Technische Fakultät Universität Bielefeld

Informatik II, SS 2018

Lex und Yacc Lt. Worf, scannen Sie das Schiff! 300dpi, Sir?

Eine Beschreibung des Programms und der dahinter stehenden Philosophie.

Einführung in die Computerlinguistik Suche mit regulären Ausdrücken

Einführung in die Computerlinguistik Suche mit regulären Ausdrücken

Kapitel 2: Formale Sprachen Gliederung. 0. Grundbegriffe 1. Endliche Automaten 2. Formale Sprachen 3. Berechnungstheorie 4. Komplexitätstheorie

Perl-Praxis. Dateien und Daten.

Perl-Praxis CPAN.

Perl. Unser erstes Programm. Grundaufbau eines Programms

Programmieren lernen mit Groovy Strings, GStrings, Textverarbeitung

Netzwerk-Programmierung. Netzwerke. Alexander Sczyrba Michael Beckstette.

Perlkurs WS 14/15 Reguläre Ausdrücke I

3.1 Reservierte Wörter

Grundlagen. Felix Döring, Felix Wittwer 24. April Python-Kurs

Compilerbau. Übung 2. Prof. Johann-Christoph Freytag Dr. Klaus Ahrens Jörg Bachmann Fabian Fier Dorian Weber. 18. Mai 2016

Was bisher geschah Chomsky-Hierarchie für Sprachen: L 0 Menge aller durch (beliebige) Grammatiken beschriebenen Sprachen L 1 Menge aller monotonen

Perl-Praxis. Dateien und Daten.

Einführung in die Computerlinguistik Pumpinglemma für reguläre Sprachen. Suche mit regulären Ausdrücken. Dozentin: Wiebke Petersen

XML-Praxis. XPath. Jörn Clausen

Digital Humanities: Übung 1

Einführung in Perl Übersicht Operatoren Mustersuche I Autoinkrement und Autodekrement Autoinkrement und Autodekrement Bsp

Programmierkurs Kapitel 4

Einführung in die Computerlinguistik Pumpinglemma für reguläre Sprachen. Suche mit regulären Ausdrücken. Dozentin: Wiebke Petersen 17.5.

Effizientes Arbeiten mit dem Emacs. Suchen und Ersetzen.

C/C++ Programmierung

Reguläre Ausdrücke. Michael Jäger. 4. April 2017

Unterschiede in Dateien mit diff

Effizientes Arbeiten mit dem Emacs. Suchen und Ersetzen.

Musterlösung Klausur 11/ Fragen zu utf-8: 1.1. Welche zwei Methoden gibt es, um STDIN und STDOUT auf utf-8 zu setzen.

Schritt für Schritt Reguläre Ausdrücke verstehen. Einstieg in. Reguläre Ausdrücke. Michael Fitzgerald O REILLY. Übersetzung von Thomas Demmig

Grammatiken. Eine Grammatik G mit Alphabet Σ besteht aus: Variablen V. Startsymbol S V. Kurzschreibweise G = (V, Σ, P, S)

Elementare Unix-Befehle 11

Grundlagen der Theoretischen Informatik

Einführung in die Theoretische Informatik

Informatik II, SS 2016

Perl Regular Expressions in Base SAS

Shellprogrammierung. Ein Mehrbenutzersystem in der Praxis - Grundlagen Linux WS Mathematisches Institut Göttingen

Familie von Zeichenkettensuchprogrammen "grep", "egrep", "fgrep"

Perl-Praxis CPAN. Jörn Clausen

XML-Praxis. XPath. Jörn Clausen

Perl-Praxis. Einführung. Jörn Clausen

Programmieren mit sockets

Wintersemester Maschinenbau und Kunststofftechnik. Informatik. Tobias Wolf Seite 1 von 29

Transkript:

Perl-Praxis Reguläre Ausdrücke Jörn Clausen joern@techfak.uni-bielefeld.de 1

Übersicht Reguläre Ausdrücke Muster suchen Muster finden 2

zur Erinnerung Perl := Practical Extraction and Report Language Text-Dateien zeilenweise einlesen Zeilen nach Mustern durchsuchen in Worte zerlegen Textstücke ersetzen 3

Reguläre Ausdrücke beschreiben einfache Sprachen schwächste Chomsky-Grammatik in Perl: regular expressions (RE) REs in Perl deutlich mächtiger als Reguläre Sprachen Die Chomsky-Hierarchie: Typ-0-Sprachen Typ-1-Sprachen Typ-2-Sprachen Typ-3-Sprachen allgemeine Regelsprachen kontextsensitive Sprachen kontextfreie Sprachen reguläre Sprachen 4

regular expressions Suchen: m/gold/ Kurzform: /Gold/ Ersetzen: s/blei/gold/ RE an Ausdruck binden: = (match operator) $story = In a hole in the ground there lived a boggit. ; if ($story = /ground/) {... $story = s/boggit/hobbit/; Wenn der Suchausdruck mit m eingeleitet wird, kann (fast) jedes beliebige andere Zeichen anstatt des slash als Klammer verwendet werden. Dies sind alles äquivalente Ausdrücke: m#gold# m Gold m!gold! Dies ist vor allem dann Hilfreich, wenn der slash Teil des Suchmusters ist, z.b. wenn Verzeichnispfade oder URLs verarbeitet werden sollen. Sonst müßte ein slash, der nicht Begrenzer des Suchmusters ist, als \/ maskiert werden. Analog gilt dies für die Ersetzung mit s///. 5

modifier beeinflussen Verhalten von m// und s/// nur die zwei wichtigsten: m/gold/i s/blei/gold/g # case insensitive # global 6

Aufgaben Die nachfolgend genannten Textdateien findest Du in /vol/lehre/perlpraxis/ Es handelt sich um Theaterstücke von Wayne Anthoney. Siehe http://www.dramex.org. Wieviele Zeilen von romeo.txt enthalten das Wort Gold? Ersetze in dem Text eric.txt das Wort Estragon durch Basil und Vladimir durch Ilyich. $romeo = /vol/lehre/perlpraxis/romeo.txt ; $count = 0; open(drama, $romeo) die "can t open $romeo: $!\n"; while ($line = <DRAMA>) { $count++ if $line = /gold/i; close(drama); print "found $count lines of pure gold\n"; $eric = /vol/lehre/perlpraxis/eric.txt ; open(drama, $eric) die "can t open $eric: $!\n"; while ($line = <DRAMA>) { $line = s/estragon/basil/g; $line = s/vladimir/ilyich/g; print $line; close(drama); 7

regular expressions, cont. Alternativen: m/huey Dewey Louie/ Gruppierung: m/(hu Dew)ey Louie/ Quantoren m/ab?a/ # aa, aba m/ab*a/ # aa, aba, abba, abbba, abbbba,... m/ab+a/ # aba, abba, abbba, abbbba,... m/ab{3,6a/ # abbba, abbbba, abbbbba, abbbbbba m/a(bab)+a/ # ababa, ababbaba, ababbabbaba,... 8

regular expressions, cont. Zeichenklassen m/hello\s+world/ m/es ist \d+ Uhr/ m/name: \w+/ # whitespace # digits # letters (words) Gegenteile : \S, \D, \W selbstgemachte Zeichenklassen m/m[ea][iy]er/ m/[a-z]{2,8/ m/[a-z][ˆ0-9]+/ # Meier, Meyer, Maier, Mayer # Account-Namen paßt auf alles:. 9

Aufgaben Lies die Datei /etc/services zeilenweise ein. Gib alle Zeilen aus, die sich auf das Protokoll TCP beziehen. Gib alle Zeilen aus, die einen Service definieren (also keine Kommentarzeilen sind). Gib alle Zeilen aus, die eine vier- oder fünfstellige Port-Nummer enthalten. while ($line = <SERV>) { # print $line if $line = /tcp/; print $line if $line = /\d+\/tcp/; while ($line = <SERV>) { print $line if $line = /\w+\s+\d+\/(tcp udp)/; while ($line = <SERV>) { print $line if $line = /\d{4,5\/(tcp udp)/; 10

Anker Muster an bestimmte Position binden Zeilenanfang, Zeilenende: m/ˆfrom:.+/ s/\s+$// m/ˆ\d+ \d+ \d+$/ # mail header # remove trailing whitespace # 3d coords Wortzwischenraum: m/\bmit\b/ m/\bmit\b/ # "nicht mit mir", "Kommen Sie mit!" # "mittendrin", nicht "vermitteln" 11

Aufgaben Vereinfache das Skript, das alle Kommentarzeilen aus /etc/services herausfiltert. Extrahiere alle Zeilen aus romeo.txt, in denen die Worte club oder clubs vorkommen, aber nicht clubroom. while ($line = <SERV>) { next if $line = /ˆ#/; print $line; while ($line = <DRAMA>) { print $line if $line = /clubs?\b/; 12

pattern capturing bis jetzt: Muster kommt in Text vor! aber: Wie sah der Treffer aus? interessanten Bereich markieren: m/ˆfrom: (.+)/ m/ˆ(\d+) (\d+) (\d+)$/ Treffer landen in $1, $2,... $line = m/ˆ(\d+) (\d+) (\d+)$/; print "point at $1,$2,$3\n"; Quantoren richtig setzen: (\w)+ vs. (\w+) 13

Aufgaben In romeo.txt finden sich Regieanweisungen der Form ROMEO enters Extrahiere die Namen der Personen, die auf diese Weise die Bühne betreten. while ($line = <DRAMA>) { if ($line = /([A-Z]+\s*[A-Z\.]+)\s+enters/) { print "$1\n"; 14

pattern capturing, cont. etwas eleganter: mit Zuweisung ($x, $y, $z) = ($line = m/ˆ(\d+) (\d+) (\d+)$/); Muster muß vollständig passen if (defined($x)) { print "point at $x,$y,$z\n"; Unterschied zwischen grouping und capturing: ($dir, $who) = ($header = m/ˆ(from To): (.+)/); ($who) = ($header = m/ˆ(?:from To): (.+)/); 15

Aufgaben Lies /etc/services ein. Stelle die Informationen über die Dienste etwas umgangssprachlicher dar. Für die Zeile ftp 21/tcp soll folgende Ausgabe erzeugt werden: der Dienst "ftp" verwendet TCP auf Port 21 Eventuelle weitere Informationen (Alias-Namen oder Kommentare) sollen ignoriert werden. Wie häufig kommen die Worte Estragon und Vladimir jeweils in eric.txt vor? open(serv, /etc/services ) die "can t open services file: $!\n"; while ($line = <SERV>) { ($serv, $port, $prot) = ($line = /ˆ(\S+)\s+(\d+)\/(tcp udp)/); if ($serv) { print "der Dienst \"$serv\" verwendet ",uc($prot), " auf Port $port.\n"; close(serv); $eric = /vol/lehre/perlpraxis/eric.txt ; ($estragon, $vladimir) = (0, 0); open(drama, $eric) die "can t open $eric: $!\n"; while ($line = <DRAMA>) { @estragon = ($line = /Estragon/gi); $estragon += @estragon; @vladimir = ($line = /Vladimir/gi); $vladimir += @vladimir; close(drama); print "found $estragon Estragons and $vladimir Vladimirs\n"; 16

greedy matches Was passiert, wenn pattern nicht eindeutig ist? $text = "aaaaaaaaaa"; ($w1, $w2) = ($text = /(a+)(a+)/); ausprobieren: /(a+)(a*)/ /(a*)(a+)/ /(a*)(a*)/ /(a?)(a*)/ /(a{2,4)(a*)/ Setze? hinter den ersten quantifier: +? *??? {2,4? + +: >>aaaaaaaaa<< >>a<< + *: >>aaaaaaaaaa<< >><< * +: >>aaaaaaaaa<< >>a<< * *: >>aaaaaaaaaa<< >><<? *: >>a<< >>aaaaaaaaa<< {2,4 *: >>aaaa<< >>aaaaaa<< +? +: >>a<< >>aaaaaaaaa<< +? *: >>a<< >>aaaaaaaaa<< *? +: >><< >>aaaaaaaaaa<< *? *: >><< >>aaaaaaaaaa<<?? *: >><< >>aaaaaaaaaa<< {2,4? *: >>aa<< >>aaaaaaaa<< 17

Text zerteilen join: Array-Elemente zu String vereinen entgegengesetzte Operation: split Trennung durch pattern: $story = "In a hole in the ground there lived a hobbit."; @words = split(/\s/, $story); 18

Aufgaben Trenne den Satz In a hole in the ground there lived a hobbit. mit den folgenden Mustern. Welche Worte entstehen dabei? / / // /\s*/ /\b/ /\B/ Wie groß sind die patterns, an denen getrennt wird? 19