6.3 Praktische Beispiele und Übungen

Reguläre Ausdrücke müssen eingeübt werden, damit die Syntax sich festigt.

Praktische Beispiele für reguläre Ausdrücke Erklärung
preg_replace('/^\s*$/', '' , $datei); Löscht alle Leerzeilen einer Datei
preg_replace('/^#.*$/', '' , $datei); Löscht alle einzeiligen Kommentarzeilen einer Datei
preg_replace('/^.*\//', '' , $pfad); Entfernt in absoluten Pfaden die Verzeichnisse und lässt den Dateinamen übrig
preg_match('/^\d{5}$/', $feld); Überprüft ein PLZ-Formularfeld auf 5 Digits
preg_match('/^\S+@\S+\.[A-Z]{2,6}$/i', $feld); Einfache Überprüfung eines E-Mail-Formularfeldes
preg_match('/^#[0-9A-F]{3}([0-9A-F]{3})?$/i', $farbe) Überprüft einen HTML-Hexcode für Farben (sowohl 3-stellig als auch 6-stellig)

Sehr viele professionelle Beispiele finden sind im Buch:

  • Goyvaerts, Jan; Levithan, Steven (2010): Reguläre Ausdrücke Kochbuch [detaillierte Lösungen für acht Programmiersprachen; mit Einstiegs-Tutorial]. O'Reilly Verlag.

Erste Übungsaufgaben

Verwendet wird: preg_replace($suchmuster, $ersetzen, $text).
Wie lautet das Ergebnis?

Übung 1

Text: Er, sein Name ist Eric, ist 23 Jahre alt
Suchmuster: /\W.*/
Ersetzen: ' '

Lösung zu Übung 1

Ergebnis: Er
Löscht von der ersten Stelle an, an der ein Zeichen vorkommt, das nicht zu einem Wort gehört. Von dort an bis zum Ende der Zeile.

Übung 2

Text: Er, sein Name ist Eric, ist 23 Jahre alt
Suchmuster: /,.*/
Ersetzen: ' '

Lösung zu Übung 2

Ergebnis: Er
Alle Zeichen hinter dem ersten Komma und das Komma werden gelöscht.

Übung 3

Text: Er, sein Name ist Eric, ist 23 Jahre alt
Suchmuster: /.,.{3}/
Ersetzen: ' '

Lösung zu Übung 3

Ergebnis: Ein Name ist Erit 23 Jahre alt
Der reguläre Ausdruck geht zum ersten Komma. Von dort aus werden gelöscht: ein Zeichen vor dem Komma, das Komma und drei Zeichen nach dem Komma. Da wir kein $limit (siehe Einfaches Beispiel für preg_replace()) angegeben haben, werden alle Treffer gelöscht. Somit geht der reguläre Ausdruck auch zum zweiten Komma und löscht dort entsprechend.

Übung 4

Text: Er, sein Name ist Eric, ist 23 Jahre alt
Suchmuster: /,.*,/
Ersetzen: ' '

Lösung zu Übung 4

Ergebnis: Er ist 23 Jahre alt
Der reguläre Ausdruck geht vom ersten bis zum letzten Komma und löscht dazwischen alles.

Übung 5

Text: Er, sein Name ist Eric, ist 23 Jahre alt
Suchmuster: /,.*?,/
Ersetzen: ' '

Lösung zu Übung 5

Ergebnis: Er ist 23 Jahre alt
Der reguläre Ausdruck geht vom ersten bis zum nächsten Komma und löscht dazwischen alles.

Übung 6

Text: Meier, Eric ist 23 Jahre alt
Suchmuster: /(\w*),\s(\w*)/
Ersetzen: "$2 $1"

Lösung zu Übung 6

Ergebnis: Eric Meier ist 23 Jahre alt
Im Ausdruck (\w*) werden alle Buchstaben des ersten Wortes gefunden (hier: Meier) und in der Variablen $1 automatisch gespeichert. Dann folgen im Suchmuster Komma und Leerzeichen, gefolgt von den Buchstaben des zweiten Wortes (hier: Eric), das in $2 gespeichert wird.

Nachvollziehen von Lösungen

Gegeben sind Aufgaben mit Lösungen. Sie sollen die unterstrichene Lösung nachvollziehen können.

PHP-Funktion Suchstring Text
preg_match() /[^mas]{4}/ "Wer was macht, macht was"
preg_match() /W.+/ "Wer was macht, macht was"
preg_match() /\w+/ "Wer was macht, macht was"
preg_match() /.\./ "Zwischen 1.220 und 1.300 Euro"
preg_match() /\D.{5}/ "Zwischen 1.220 und 1.300 Euro"
preg_match() /\b\W.*0/ "Zwischen 1.220 und 1.300 Euro"
preg_match() /[A-Z][a-z]\d/ "Zwischen 1.220 und 1.300 Euro" (kein Treffer)
preg_match() /(Text|Briefe)/ "Dies ist ein Text einer 1. Testseite"
preg_match() /[a-z]{3}$/ "Dies ist ein Text einer 1. Testseite"
preg_match() /\d\.\s\w\w\w/ "Dies ist ein Text einer 1. Testseite"
preg_match() /(\s\w+){2,3}/ "Dies ist ein Text einer 1. Testseite"
preg_match() /\w.\s\w{1,3}/ "Dies ist ein Text einer 1. Testseite"
Lösung zu Aufgabe 2

Der reguläre Ausdruck /W.+/ fängt mit W an, gefolgt von einem oder mehreren Zeichen. Dies trifft auf den gesamten Text "Wer was macht, macht was" zu, da W am Anfang steht und der Rest des Textes mehrere Zeichen umfasst.

Weitere Übungsaufgaben

Aufgabe

Zeigen Sie anhand von eigenen Beispielen:

(a) den Unterschied zwischen /Ha.?s/ und /Ha.+s/

(b) den Unterschied zwischen abc* und (abc)*?

Übung

Nutzen Sie anstelle der Quantoren *, +, ? das Wiederholungsintervall {}:

Wie lautet das Wiederholungsintervall für den Quantor *?

Wie lautet das Wiederholungsintervall für den Quantor +?

Wie lautet das Wiederholungsintervall für den Quantor ?

Lösung zu Übung

Wie lautet das Wiederholungsintervall für den Quantor *: {0,}

Wie lautet das Wiederholungsintervall für den Quantor +: {1,}

Wie lautet das Wiederholungsintervall für den Quantor ?: {0,1}

Gegeben sind Aufgaben ohne Lösungen. Die Lösungen ermitteln Sie bitte über ein Web-Interface für reguläre Ausdrücke.

Reguläre Ausdrücke: Aufgaben zum Selbstlösen

PHP-Funktion Suchstring Text
preg_match() /.../ "Dagobert Duck, Donald Duck u.s.w."
preg_match() /.*,./ "Dagobert Duck, Donald Duck u.s.w."
preg_match_all() /u.{3}/ "Dagobert Duck, Donald Duck u.s.w."
preg_match_all() /.\s/ "Dagobert Duck, Donald Duck u.s.w."
preg_match_all() /D\w+/ "Dagobert Duck, Donald Duck u.s.w."
preg_match() /\s.*\s/ "Zwei Zwerge zeigen zwanzig Zehen"
preg_match() /\b[a-z].*?\s/ "Zwei Zwerge zeigen zwanzig Zehen"
preg_match() /\D+/i "Zwei Zwerge zeigen zwanzig Zehen"
preg_match_all() /Z/i "Zwei Zwerge zeigen zwanzig Zehen"
preg_match_all() /D\w+/ "Zwei Zwerge zeigen zwanzig Zehen"