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