Programmierkurs f - PowerPoint PPT Presentation

1 / 27
About This Presentation
Title:

Programmierkurs f

Description:

Programmierkurs f r absolute Anf nger Regul re Ausdr cke / regular expressions Caren Brinckmann Sommersemester 2005 http://www.coli.uni-saarland.de/~cabr/teaching ... – PowerPoint PPT presentation

Number of Views:97
Avg rating:3.0/5.0
Slides: 28
Provided by: Masterblaster
Category:

less

Transcript and Presenter's Notes

Title: Programmierkurs f


1
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

2
Wozu braucht man das? (1)
3
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/)
  • print "laut ist ein Plosiv!"

4
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!"

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,
    ...

6
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!

7
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"

8
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\

9
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

10
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

11
Sonderzeichen Beispiel (1)
druck1.pl
text1.txt
  • while (zeile ltSTDINgt)
  • if (zeile /Wir/)
  • print zeile
  • Wir wollen Eis essen.
  • Das hat keine Wirkung.
  • Wirkungsgrad ist Null.

Aufruf perl w druck1.pl lt text1.txt Ausgabe?
12
Sonderzeichen Beispiel (2)
druck2.pl
text2.txt
  • while (zeile ltSTDINgt)
  • if (zeile /ung\./)
  • print zeile
  • Die Bedienung kommt.
  • Das hat keine Wirkung.
  • Keine Ahnung!

Aufruf perl w druck2.pl lt text2.txt Ausgabe?
13
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)
  • /halo/ matcht halo hallo halllo zhalllllloxxx
  • /halo/ matcht nicht hao
  • bedeutet, dass das vorhergehende Zeichen
    keinmal oder beliebig häufig vorkommen kann
  • /halo/ matcht hao halo hallo zhalllllloxxx

14
Sonderzeichen Beispiel (3)
druck3.pl
text3.txt
  • while (zeile ltSTDINgt)
  • if (zeile /Ale/)
  • print zeile
  • Alle trinken Bier.
  • Briten trinken Ale.
  • Alte Hasen!

Aufruf perl w druck3.pl lt text3.txt Ausgabe?
15
Sonderzeichen Beispiel (4)
druck4.pl
text4.txt
  • while (zeile ltSTDINgt)
  • if (zeile /Alt?e/)
  • print zeile
  • Alle trinken Bier.
  • Briten trinken Ale.
  • Alte Hasen!
  • Frau Aterer kommt.

Aufruf perl w druck4.pl lt text4.txt Ausgabe?
16
Sonderzeichen Beispiel (5)
druck5.pl
text5.txt
  • while (zeile ltSTDINgt)
  • if (zeile /./)
  • print zeile
  • Alle trinken Bier.
  • Briten trinken Ale.
  • Alte Hasen!

Aufruf perl w druck5.pl lt text5.txt Ausgabe?
17
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.
  • /hal2o/ matcht xhalloy/hal2o/ matcht
    nicht xhallloy halo
  • /hal2,o/ matcht hallo halllllox/hal2,o/ match
    t nicht hao halo
  • /hal2,3o/ matcht hallo halllox/hal2,3o/ match
    t nicht halo hallllox

18
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

19
Ãœbung
  • 1) abc 2) ac 3) abbb
  • 4) bbc 5) aabcd 6) b
  • Welche Zeichenketten(teile) werden jeweils
    gematcht?
  • /abc?/
  • /a?bc/
  • /bc/
  • /bc/
  • /a.b?c/
  • /b2,c?/
  • /a1,2b.?d/

20
Gruppierung ( )
  • Mehrere Zeichen können mit runden Klammern
    gruppiert werden.
  • Dadurch ist es möglich, die Wiederholungssonderzei
    chen 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

21
Ãœbung
  • Welche der folgenden Zeichenketten wird von
    /a(ab)a/ gematcht?
  • 1) abababa
  • 2) aaba
  • 3) aabbaa
  • 4) aba
  • 5) aabababa

22
Alternative Zeichenketten
  • Mit dem Pipe-Zeichen kann man mehrere
    alternative Zeichenketten angeben.
  • /(HerrFrau) Mayer/ matcht Herr Mayer, Frau Mayer
  • /A(nnll)e/ matcht Anne, Alle
  • /HundKatzeMaus/ matcht Hund, Katzen, Mausi

if (wort /(beentergemissverzer)/)
print "wort beginnt mit einem Präfix!"
23
Zeichenmenge
  • Eine Menge von Zeichen in eckigen Klammern
    bedeutet, dass genau eins dieser Zeichen gesucht
    wird (egal welches).
  • /marcklo/ matcht marco, marko, marlo
  • matcht nicht marcko, marmo
  • /Maeiyer/ matcht Maier, Mayer, Meier, Meyer
  • /aln2e/ matcht alle, anne, alne, anle

24
Zeichenbereich -
  • Wenn genau ein Zeichen aus einem Zeichenbereich
    oder eine Ziffer aus einem Ziffernbereich gesucht
    wird, so verwendet man den Bindestrich in eckigen
    Klammern.
  • /ak-na/ matcht aka, ala, ama, ana
  • /A-Za-z/ matcht alle Zeichenketten mit
    einem Großbuchstaben gefolgt von mindestens
    einem Kleinbuchstaben
  • /0-95/ matcht alle fünfstelligen
    Dezimalzahlen (auch mit führenden Nullen)

25
Ãœ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!?

26
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!
  • /amnla/ matcht aga, a a, a9a, mara
  • matcht nicht ama, ana, ala
  • /a-za/ matcht Mama, Larifari
  • matcht nicht mama, alari, aMama

27
Nachlesen und Ausprobieren!
  • http//www.tekromancer.com/perl2/7.html
  • http//gnosis.cx/publish/programming/regular_expre
    ssions.html
  • http//www.itri.brighton.ac.uk/ARCHIVE/courses/MSc
    Lex/exercises/regex/
  • http//www.regular-expressions.info/quickstart.htm
    l
  • http//www.ifi.unizh.ch/cl/siclemat/lehre/ss01/pcl
    2/regextut
Write a Comment
User Comments (0)
About PowerShow.com