Wozu braucht man das? (1) Muss erkennen, wo das Wort „Schröder“ sich befindet und dieses durch „Schroeder“ ersetzen Programmierkurs für absolute Anfänger.

Slides:



Advertisements
Ähnliche Präsentationen
Algorithmen und Datenstrukturen
Advertisements

Transkription in der Sprachsythese und –erkennung SS 2004 Regelgesteuerte automatische Transkription auf der Basis von Expertenwissen Referent: Freshta.
Forschungszentrum caesar
Struktur-Funktions-Modelle von Pflanzen - Sommersemester Winfried Kurth Universität Göttingen, Lehrstuhl Computergrafik und Ökologische Informatik.
Zusammenfassung der Vorwoche
Dr. Andreas Winter Sommersemester 2007 Einführung in die Software-Entwicklung © Institut für Informatik Programmier-Richtlinien vgl. auch
Suche in Texten (Stringsuche )
Imperative Programmierung
FH-Hof Extensible Markup Language Richard Göbel. FH-Hof Extensible Markup Language XML XML ist universeller Ansatz für die Strukturierung von Zeichenketten.
Java: Dynamische Datentypen
Unix-Shells Shell: Unix-Shell-Varianten:
Dateihandles Um in Perl eine bestimmte Datei zum Lesen, Schreiben oder Anhängen zu öffnen, benötigt man so genannte Dateihandles. Ein Dateihandle ist der.
Programmierkurs für absolute Anfänger Listen und Arrays Caren Brinckmann Sommersemester 2005.
Funktion defined Die Funktion defined testet, ob eine Variable einen anderen Wert als undef enthält. Ist der Wert undef, so wird falsch zurückgegeben,
Übungen 10 Leute haben das erste Übungsblatt allein bearbeitet bzw. separat abgegeben. Wichtig: Übungspartner finden! Außerdem: Lösungen nur einmal abgeben.
Flussdiagramm: längster Laut und seine Dauer
C- Syntax. Bestandteile der Sprache C: Ausdrücke Anweisungen.
SWITCH - Anweisung.
Parameterübergabe von zweidimensionalen Feldern in Funktionen.
Suche in Texten: Suffix-Bäume
WS Prof. Dr. Th. Ottmann Algorithmentheorie 09 - Suche in Texten Suffix - Bäume.
Grundkurs Theoretische Informatik, Folie 3.1 © 2004 G. Vossen,K.-U. Witt Grundkurs Theoretische Informatik Kapitel 3 Gottfried Vossen Kurt-Ulrich Witt.
Syntax von Prolog & Familiendatenbasis
Fakten, Regeln und Anfragen
EINI-I Einführung in die Informatik für Naturwissenschaftler und Ingenieure I Vorlesung 2 SWS WS 99/00 Gisbert Dittrich FBI Unido
Zusammenfassung Vorwoche
Christian Schindelhauer
Christian Schindelhauer
Die Skriptsprache Perl (3) Wolfgang Friebel DESY Zeuthen.
Die Skriptsprache Perl (2) Wolfgang Friebel DESY Zeuthen.
Ralf KüstersDagstuhl 2008/11/30 2 Ralf KüstersDagstuhl 2008/11/30 3.
HORIZONT 1 XINFO ® Das IT - Informationssystem Java Scanner HORIZONT Software für Rechenzentren Garmischer Str. 8 D München Tel ++49(0)89 / 540.
Information und Kommunikation Hartmut Klauck Universität Frankfurt SS
Seminar Internet Technologien
FORTRAN 77.
Auslegung eines Vorschubantriebes
SS 2004 Datenbanken 4W Mi 13:30 – 15:00 G 2.30 Vorlesung #7 SQL (Teil 2)
WS 2013/14 Datenbanksysteme D0 15:15 – 16:45 R Vorlesung #5 SQL (Teil 2)
Potenzen und Wurzeln Zusammenfassung
Einführung in die Prozentrechnung
ADAT©2004 Dipl. - Ing. Walter SabinSeite: 1 Version 1.0a Einführung in Reguläre Ausdrücke.
Erste Schritte mit dem virtuellen Klassenzimmer Diese Anleitung verwendet in den meisten Fällen den Browser Firefox; Für den Browser Internet-Explorer.
Automaten, formale Sprachen und Berechenbarkeit II SoSe 2004 Prof. W. Brauer Teil 1: Wiederholung (Vor allem Folien von Priv.-Doz. Dr. Kindler vom WS 2001/02.
Dynamische Webseiten-Generierung
Dieser nicht Fehler finden Algorithmus enthält einfach einen gravierenden welcher zu ist.
Beispiele: KFG 2.Teil Beispiel 1: Sei G eine Grammatik mit den folgenden Regeln: S  Ac | Bd A  aAb | ab B  aBbb | abb Definieren Sie.
1 Tagesüberblick 2 Lösung Hausaufgabe/Fragen Datei- ein- und ausgabe Schleifen Vergleiche Wahrheit.
Nicht alles muss man mit einem Zitat belegen.
Der Gesundheitslauf – das Spiel
Arne Vater Wintersemester 2006/ Vorlesung
1 Albert-Ludwigs-Universität Freiburg Rechnernetze und Telematik Prof. Dr. Christian Schindelhauer Informatik III Christian Schindelhauer Wintersemester.
se_10_regulaere_ausdruecke.ppt1 Softwareengineering Reguläre Ausdrücke (regular expressions) Prof. Dr.-Ing. Axel Benz, Berlin School of Economics.
1 Tagesüberblick 4 Lösung Hausaufgabe/Fragen Mustervergleiche.
Analyse der Laufzeit von Algorithmen
Java Syntaxdiagramme Buchstabe A B Z a z ... Ziffer
Institut für Softwarewissenschaft – Universität WienP.Brezany 1 Beispiele (Frist: ) Beispiel 1: Sei  = {a, b} ein Alphabet und Q = {q 0, q 1 } eine.
7. Formale Sprachen und Grammatiken
1 Tagesüberblick 5 Lösung Hausaufgabe/Fragen Assoziative Felder Funktionen zu Variablenbehandlung.
Anwenden von Funktionen im EXCEL Anwenden von Funktionen im EXCEL © Walter Riedle, Computeria-Urdorf, 2008 Funktionen sind Prozesse (= Programme), die.
1 Lösung Hausaufgabe 5-1 Seite 1 #!perl -w # Datei Oeffnen und Variablen initialisieren $infile = "daten5-3.txt"; $im=$iw=$sm=$sw=0; open (IN,$infile)
Programmierungssprache PERL
(Syntax, Strings/Zahlen, Variablen, Arrays)
Reguläre Ausdrücke / regular expression. P. Brezany2 =~
Reguläre Ausdrücke / regular expression. P. Brezany2 =~
Reguläre Ausdrücke Stephan Baldes
Variablen und Datentypen
Regular Expressions HBU-LINUX-2003 Adduser.sh? My_user_Verw.sh? AufgUser.sh? Wo ist das Script ??????? /home/donald ? /home ? /tmp ?
Gliederung 0. Motivation und Einordnung 1. Endliche Automaten
Left Join, Right Join, Outer Join
Unterschiedliche Kontrollstrukturen
 Präsentation transkript:

Programmierkurs für absolute Anfänger  Reguläre Ausdrücke / regular expressions Caren Brinckmann Sommersemester 2005 http://www.coli.uni-saarland.de/~cabr/teaching.php

Wozu braucht man das? (1) Muss erkennen, wo das Wort „Schröder“ sich befindet und dieses durch „Schroeder“ ersetzen Programmierkurs für absolute Anfänger – Sitzung 5

Wozu braucht man das? (2) if (($laut eq "p") || ($laut eq "t") || ($laut eq "k") || ($laut eq "b") || ($laut eq "d") || ($laut eq "g")) { print "$laut ist ein Plosiv!"; } kürzer: if ($laut =~ /^[ptkbdg]$/) { Programmierkurs für absolute Anfänger – Sitzung 5

Was sind reguläre Ausdrücke? (1) Reguläre Ausdrücke (RA) sind genau definierte Suchmuster für Zeichenfolgen (d.h. einzelne Zeichen und Zeichenketten). Mit RA kann man nach Zeichenfolgen suchen, die dem jeweiligen Suchmuster entsprechen, und sie weiterverarbeiten (ersetzen, umformatieren, konkatenieren, ...). Außerdem kann man Bedingungen in Programmen an reguläre Ausdrücke knüpfen. if ($laut =~ /^[ptkbdg]$/) { print "$laut ist ein Plosiv!"; } Programmierkurs für absolute Anfänger – Sitzung 5

Was sind reguläre Ausdrücke? (2) Ein RA ist also eine Beschreibung, die auf eine ganze Menge von Zeichenfolgen passt. Was bedeutet das konkret? Am besten lernen durch viele Beispiele! Wo werden RA in der Praxis eingesetzt? UNIX-Kommandozeilentools: grep, sed, awk, ... Texteditoren: XEmacs, TextPad, ... Programmiersprachen: Perl, Python, Java, ... Shells (eingeschränkt): bash, Windows-Konsole, ... Programmierkurs für absolute Anfänger – Sitzung 5

Einfache RA in Perl Ein RA wird in Perl zwischen zwei Schrägstriche eingeschlossen: /a/ Wenn ein RA auf eine Zeichenfolge passt, so sagt man auch „der reguläre Ausdruck matcht die Zeichenfolge“. Bsp: /a/ matcht die Zeichenfolge "a" aber auch das 'a' in "Hallo". Zeichen- und Zeichenkettenliterale: /a/ Alabama liegt in Amerika. /a / Alabama liegt in Amerika. /haben/ Wir haben keinen Zucker mehr. Haben Sie welchen? Leerzeichen und Groß-/Kleinschreibung beachten! Sagen: die / / gehören nicht zum regulären Ausrdruck! Programmierkurs für absolute Anfänger – Sitzung 5

Matching Operator =~ Um einen regulären Ausdruck mit einer Zeichenkette zu vergleichen, benötigt man den sogenannten Matching Operator: =~ $wort = "Hans"; if ($wort =~ /an/) { print "match!\n"; } else { print "kein match!\n"; } Programmierkurs für absolute Anfänger – Sitzung 5

Sonderzeichen Ein RA besteht aus Literalen (also: wörtlich zu interpretierenden Zeichen und Zeichenketten), und aus folgenden Sonderzeichen, die eine spezielle Bedeutung haben: \ . ^ $ + ? * { } ( ) [ ] | D.h., wenn eins dieser Sonderzeichen wörtlich gesucht werden soll, so muss es mit einem vorangestellten \ (backslash) "entwertet" werden, z.B. /2\$/ matcht Das kostet 2$. /2$/ matcht nicht Das kostet 2$. Übung: [2] ja? 2.3 (oder?) \abc\ Sagen: die / / gehören nicht zum regulären Ausrdruck! Programmierkurs für absolute Anfänger – Sitzung 5

Sonderzeichen: Wildcard . Der Punkt . steht für genau ein beliebiges Zeichen (Ausnahme: Zeilentrennzeichen \n). /a./ Maria mag Anna Übung: /mar.o/ matcht welche Teile? marco, amarzo, marsio, Mario, amar ono, schmargo, ammarkoni, marrko Übung: Konstruiere einen regulären Ausdruck, der auf alle Zeichenketten unter a) passt (also Zeichenkettenteile matcht), aber keine der Zeichenketten unter b) akzeptiert: pit b) pt spot Pot spate peat slap two part respite Programmierkurs für absolute Anfänger – Sitzung 5

Sonderzeichen: Positionsmarker ^ und $ Das Caret-Zeichen ^ steht für den Anfang einer Zeichenkette. Das Dollar-Zeichen $ steht für das Ende einer Zeichenkette. /^Henning/ matcht Henning Meier /^Henning/ matcht nicht Meier Henning /Henning$/ matcht nicht Henning Meier /Henning$/ matcht Meier Henning Programmierkurs für absolute Anfänger – Sitzung 5

Sonderzeichen: Beispiel (1) druck1.pl text1.txt while ($zeile = <STDIN>) { if ($zeile =~ /^Wir/) { print $zeile; } Wir wollen Eis essen. Das hat keine Wirkung. Wirkungsgrad ist Null. Aufruf: perl –w druck1.pl < text1.txt Ausgabe? Programmierkurs für absolute Anfänger – Sitzung 5

Sonderzeichen: Beispiel (2) druck2.pl text2.txt while ($zeile = <STDIN>) { if ($zeile =~ /ung\.$/) { print $zeile; } Die Bedienung kommt. Das hat keine Wirkung. Keine Ahnung! Aufruf: perl –w druck2.pl < text2.txt Ausgabe? Programmierkurs für absolute Anfänger – Sitzung 5

Sonderzeichen: Wiederholungen ? + * ? bedeutet, dass das vorhergehende Zeichen keinmal oder einmal vorkommen kann (also: höchstens einmal) /hal?o/ matcht hao halo zhaloxxx /hal?o/ matcht nicht hallo + bedeutet, dass das vorhergehende Zeichen einmal oder mehrmals vorkommen kann (also: mindestens einmal) /hal+o/ matcht halo hallo halllo zhalllllloxxx /hal+o/ matcht nicht hao * bedeutet, dass das vorhergehende Zeichen keinmal oder beliebig häufig vorkommen kann /hal*o/ matcht hao halo hallo zhalllllloxxx Programmierkurs für absolute Anfänger – Sitzung 5

Sonderzeichen: Beispiel (3) druck3.pl text3.txt while ($zeile = <STDIN>) { if ($zeile =~ /Al+e/) { print $zeile; } Alle trinken Bier. Briten trinken Ale. Alte Hasen! Aufruf: perl –w druck3.pl < text3.txt Ausgabe? Programmierkurs für absolute Anfänger – Sitzung 5

Sonderzeichen: Beispiel (4) druck4.pl text4.txt while ($zeile = <STDIN>) { if ($zeile =~ /Al*t?e/) { print $zeile; } Alle trinken Bier. Briten trinken Ale. Alte Hasen! Frau Aterer kommt. Aufruf: perl –w druck4.pl < text4.txt Ausgabe? Programmierkurs für absolute Anfänger – Sitzung 5

Sonderzeichen: Beispiel (5) druck5.pl text5.txt while ($zeile = <STDIN>) { if ($zeile =~ /.+/) { print $zeile; } Alle trinken Bier. Briten trinken Ale. Alte Hasen! Aufruf: perl –w druck5.pl < text5.txt Ausgabe? Programmierkurs für absolute Anfänger – Sitzung 5

Sonderzeichen: Wiederholungen { } Die geschweiften Klammern { } werden benutzt, um eine exakte Anzahl {n} eine Mindestanzahl {n,} eine Mindest- und eine Höchstanzahl {n,m} von Zeichenwiederholungen zu suchen. /hal{2}o/ matcht xhalloy /hal{2}o/ matcht nicht xhallloy halo /hal{2,}o/ matcht hallo halllllox /hal{2,}o/ matcht nicht hao halo /hal{2,3}o/ matcht hallo halllox /hal{2,3}o/ matcht nicht halo hallllox Programmierkurs für absolute Anfänger – Sitzung 5

Zusammenfassung Sonderzeichen: Wiederholungen * keinmal oder beliebig oft + mindestens einmal ? höchstens einmal {n} genau n-mal {n,} mindestens n-mal {n,m} mindestens n-mal, aber maximal m-mal Äquivalenzen: * ist äquivalent zu {0,} + ist äquivalent zu {1,} ? ist äquivalent zu {0,1} Programmierkurs für absolute Anfänger – Sitzung 5

Übung Welche Zeichenketten(teile) werden jeweils gematcht? /ab+c?/ 1) abc 2) ac 3) abbb 4) bbc 5) aabcd 6) b Welche Zeichenketten(teile) werden jeweils gematcht? /ab+c?/ /a?b*c/ /b+c*/ /^b+c*$/ /a.+b?c/ /b{2,}c?/ /^a{1,2}b+.?d*/ Programmierkurs für absolute Anfänger – Sitzung 5

Gruppierung: ( ) Mehrere Zeichen können mit runden Klammern gruppiert werden. Dadurch ist es möglich, die Wiederholungssonderzeichen nicht nur auf einzelne Zeichen, sondern auch auf Zeichenketten und eingebettete RA anzuwenden. /(ro)+/ matcht robo, rororo, brorok /h(al)*lo/ matcht hlo, hhalallo, halloi /ha(ll)?o/ matcht hao, hallo, ahaoi /(h?a)+lo/ matcht haahalo, aaalo, hahahalo, alo, halo Programmierkurs für absolute Anfänger – Sitzung 5

Übung Welche der folgenden Zeichenketten wird von /a(ab)*a/ gematcht? 1) abababa 2) aaba 3) aabbaa 4) aba 5) aabababa Programmierkurs für absolute Anfänger – Sitzung 5

Alternative Zeichenketten: | Mit dem Pipe-Zeichen | kann man mehrere alternative Zeichenketten angeben. /(Herr|Frau) Mayer/ matcht Herr Mayer, Frau Mayer /A(nn|ll)e/ matcht Anne, Alle /Hund|Katze|Maus/ matcht Hund, Katzen, Mausi if ($wort =~ /^(be|ent|er|ge|miss|ver|zer)/) { print "$wort beginnt mit einem Präfix!"; } Programmierkurs für absolute Anfänger – Sitzung 5

Zeichenmenge: [ ] Eine Menge von Zeichen in eckigen Klammern bedeutet, dass genau eins dieser Zeichen gesucht wird (egal welches). /mar[ckl]o/ matcht marco, marko, marlo matcht nicht marcko, marmo /M[ae][iy]er/ matcht Maier, Mayer, Meier, Meyer /a[ln]{2}e/ matcht alle, anne, alne, anle Programmierkurs für absolute Anfänger – Sitzung 5

Zeichenbereich: [ - ] Wenn genau ein Zeichen aus einem Zeichenbereich oder eine Ziffer aus einem Ziffernbereich gesucht wird, so verwendet man den Bindestrich in eckigen Klammern. /a[k-n]a/ matcht aka, ala, ama, ana /[A-Z][a-z]+/ matcht alle Zeichenketten mit einem Großbuchstaben gefolgt von mindestens einem Kleinbuchstaben /[0-9]{5}/ matcht alle fünfstelligen Dezimalzahlen (auch mit führenden Nullen) Programmierkurs für absolute Anfänger – Sitzung 5

Übung Welche der folgenden Zeichenketten wird von /^[A-Za-z ]+[\.\?!]$/ gematcht? Lauf! Der Gärtner mäht den Rasen. Wie lange warst Du in Rotenburg/Wuemme? Lisa sucht den Ball. Hast Du schon abgewaschen? Ich glaube ich spinne!? Programmierkurs für absolute Anfänger – Sitzung 5

Negation einer Zeichenauswahl: [^ ] Wenn am Anfang einer Zeichenmenge oder eines Zeichenbereichs das Caret-Zeichen ^ steht, so wird jedes Zeichen gematcht, das nicht zu der Menge bzw. dem Bereich gehört. Das Caret-Zeichen hat also zwei Bedeutungen! /a[^mnl]a/ matcht aga, a a, a9a, mara matcht nicht ama, ana, ala /^[^a-z]a/ matcht Mama, Larifari matcht nicht mama, alari, aMama Programmierkurs für absolute Anfänger – Sitzung 5

Nachlesen und Ausprobieren! http://www.tekromancer.com/perl2/7.html http://gnosis.cx/publish/programming/regular_expressions .html http://www.itri.brighton.ac.uk/ARCHIVE/courses/MScLex/e xercises/regex/ http://www.regular-expressions.info/quickstart.html http://www.ifi.unizh.ch/cl/siclemat/lehre/ss01/pcl2/regextut Sagen: die / / gehören nicht zum regulären Ausrdruck! Programmierkurs für absolute Anfänger – Sitzung 5