Perl-Praxis. Madis Rumming Jan Krüger

Ähnliche Dokumente
Perl-Praxis. Jörn Clausen

Perl-Praxis.

Perl-Praxis. Jörn Clausen

Perl-Praxis.

Komplexe Datenstrukturen

(Prüfungs-)Aufgaben zu formale Sprachen

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

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

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

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

Reguläre Ausdrücke Suchmuster, Pattern Matching

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

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

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

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

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

Informationsextraktion Materialien zur Vorlesung

Ein- und Ausgabeumlenkung

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

15 Der AWK. (Aho, Weinberger, Kernighan)

Was bisher geschah: Formale Sprachen

Proseminar UNIX Tools. Ferdinand Beyer

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

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

/ Vortrag Unix-AG

Reguläre Ausdrücke mit Java

Unterschiede in Dateien mit diff

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

Arithmetik in der tcsh

Stream EDitor SED und Reguläre Ausdrücke

Ein Array ist eine Liste mit Einträgen, fast wie eine Einkaufsliste. Man kann darin also mehr als einen Eintrag in eine einzige Variable speichern.

Perl. Unser erstes Programm. Grundaufbau eines Programms

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

Perl-Praxis. CGI-Skripte. Madis Rumming, Jan Krüger.

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

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

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

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

Programmieren lernen mit Groovy Strings, GStrings, Textverarbeitung

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

Informatik II, SS 2018

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

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

Eine Beschreibung des Programms und der dahinter stehenden Philosophie.

Programmierkurs Kapitel 4

Digital Humanities: Übung 1

Perl-Praxis. Kontrollstrukturen. Jörn Clausen

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

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

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

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

Es gibt immer einen Schlüssel und einen zugehörigen Wert,

Grundlagen der Theoretischen Informatik

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

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

Einführung in die Theoretische Informatik

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

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

Perl Regular Expressions in Base SAS

Übersicht. Einführung in Perl Datenstrukturen I. Datentypen Übersicht (1) Kernbegriffe. Kernbegriffe. Einführung der Datentypen.

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

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

Komplexe Datenstrukturen

C/C++ Programmierung

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

/ Software Freedom Day

Efficient Regexes. Pascal Zambito

3 Syntax von Programmiersprachen

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

Theorie der Informatik. Theorie der Informatik. 6.1 Einführung. 6.2 Alphabete und formale Sprachen. 6.3 Grammatiken. 6.4 Chomsky-Hierarchie

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

Einführung in Perl. O'REILLY Beijing Cambridge Farnham Köln Sebastopol Taipei Tokyo. Randal L. Schwartz, Tom Phoenix & brian dfoy

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

3 Syntax von Programmiersprachen

1 Automatentheorie und Formale Sprachen

VORLESUNG EINFÜHRUNG IN DIE PROGRAMMIERUNG FÜR COMPUTERLINGUISTEN

Grammatik der Genome

2 Eine einfache Programmiersprache

3. Klausur Einführung in die Theoretische Informatik Seite 1 von Welches der folgenden klassischen Probleme der Informatik ist entscheidbar?

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

Thomas Theis PHP4. Webserver-Programmierung für Um- und Einsteiger. Galileo Press

Theoretische Grundlagen der Informatik

KLAUSUR ZUM BACHELORMODUL,,EINFÜHRUNG IN DIE PROGRAMMIERUNG WS 2011/12, DR. MAXIMILIAN HADERSBECK KLAUSUR AM

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

Grundlagen der Theoretischen Informatik

Informatik II, SS 2016

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

Effizientes Arbeiten mit dem Emacs. Suchen und Ersetzen.

Sei Σ ein endliches Alphabet. Eine Sprache L Σ ist genau dann regulär, wenn sie von einem regulären Ausdruck beschrieben werden kann.

Komplexe Datenstrukturen

2. Gegeben sei folgender nichtdeterministischer endlicher Automat mit ɛ-übergängen:

C++ Teil 7. Sven Groß. 3. Juni Sven Groß (IGPM, RWTH Aachen) C++ Teil 7 3. Juni / 16

9. Vektoren. (auch Felder/array)

Reguläre Ausdrücke O'REILLT. Jeffrey E. E Eriedl. Deutsche Übersetzung von Andreas Karr er

Effizientes Arbeiten mit dem Emacs. Suchen und Ersetzen.

Transkript:

Perl-Praxis Reguläre Ausdrücke Madis Rumming Jan Krüger {mrumming,jkrueger}@cebitec.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 allgemeine Regelsprachen Typ-1-Sprachen kontextsensitive Sprachen Typ-2-Sprachen kontextfreie Sprachen Typ-3-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 # case insensitive s/blei/gold/g # global 6

Aufgaben Die nachfolgende genannten Textdateien findest Du in /vol/lehre/perlpraxis/. Es handelt sich um Theaterstücke von Wayne Anthoney. Wieviel Zeilen von romeo.txt enthalten das Wort,,Gold? Erzetze in dem Text eric.txt das Wort,,Estragon durch,,basil und,,vladimir durch,,ilyich. Nach Gold suchen: Namen ersetzen (Vorsicht: nur den Namen des Features ändern!): 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,6}a/ # abbba, abbbba, abbbbba, abbbbbba m/a(bab)+a/ # ababa, ababbaba, ababbabbaba,... 8

regular expressions, cont. Zeichenklassen m/hello\s+world/ # whitespace m/es ist \d+ Uhr/ # digits m/name: \w+/ # 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

Anker Muster an bestimmte Position binden Zeilenanfang, Zeilenende: m/^locus.+/ # LOCUS Zeile aus GenBank Datei s/\s+$// # remove trailing whitespace m/^\d+ \d+ \d+$/ # 3d coords Wortzwischenraum: m/\bmit\b/ m/\bmit\b/ # "nicht mit mir", "Kommen Sie mit!" # "mittendrin", nicht "vermitteln" 10

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 Kommentarzeile sind). Gib alle Zeilen aus, die eine vier- oder fünfstellige Port-Nummer enthalten. Wie kann man alle Zeilen aus romeo.txt extrahieren, in denen die Worte,,club oder,,clubs vorkommenen, aber nicht,,clubroom? club und clubs, aber nicht clubroom : 11

pattern capturing bis jetzt: Muster kommt in Text vor! aber: Wie sah der Treffer aus? interessanten Bereich markieren: m/^locus\s+(\s+)/ m/^version\s+(\s+)\.(\d+)\s+gi:(\d+)$/ Treffer landen in $1, $2,... $line =~ m/^version\s+(\s+)\.(\d+)\s+gi:(\d+)$/ print "Accession: $1, Version: $2, GI: $3\n"; Quantoren richtig setzen: (\w)+ vs. (\w+) 12

Aufgaben In romeo.txt finden sich Regieanweisungen der Form ROMEO enters Extrahiere die Namen der Personen, die auf diese Weise die Bühne betreten. 13

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): (.+)/); Der Ausdruck ($dir, $who) = ($header =~ m/^(from To): (.+)/); captured auch From\To, der folgende nicht: ($who) = ($header =~ m/^(?:from To): (.+)/); 14

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. Service-Liste formatieren: 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"; } } 15

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}? greedy: + +: >>aaaaaaaaa<< >>a<< + *: >>aaaaaaaaaa<< >><< * +: >>aaaaaaaaa<< >>a<< * *: >>aaaaaaaaaa<< >><<? *: >>a<< >>aaaaaaaaa<< {2,4} *: >>aaaa<< >>aaaaaa<< non-greedy: +? +: >>a<< >>aaaaaaaaa<< +? *: >>a<< >>aaaaaaaaa<< *? +: >><< >>aaaaaaaaaa<< *? *: >><< >>aaaaaaaaaa<<?? *: >><< >>aaaaaaaaaa<< {2,4}? *: >>aa<< >>aaaaaaaa<< 16

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); 17

verschiedene Trennmuster: / / In a hole in the ground there lived a hobbit. // I n a h o l e i n t h e g r o u n d t h e r e l i v e d a h o b b i t. /\s*/ I n a h o l e i n t h e g r o u n d t h e r e l i v e d a h o b b i t. /\b/ In a hole in the ground there lived a hobbit. /\B/ I n a h o l e i n t h e g r o u n d t h e r e l i v e d a h o b b i t. Das pattern / / ist ein Zeichen groß. Die patterns //, /\b/ und /\B/ haben keine Ausdehunng. Das pattern \s* hat variable Größe. 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? 18