Geschweifte Klammern in regulären Ausdrücken von PHP
Die Operatoren +, *, ? sind gut,
allerdings kann mit ihnen nicht eine bestimmte
Anzahl von Wiederholungen angegeben werden. In diesem Fall kommt der Operator {}
zur Rettung.
Er funktioniert wie folgt: {5}
- fünf Wiederholungen, {2,5} - wiederholt sich
von zwei bis fünf (beide inklusive), {2,}
- wiederholt sich zwei Mal oder öfter.
Beispiel
In diesem Beispiel sieht das Suchmuster so aus:
Buchstabe 'x', Buchstabe 'a' ein
oder zwei Mal, Buchstabe 'x':
<?php
$str = 'xx xax xaax xaaax';
$res = preg_replace('#xa{1,2}x#', '!', $str);
?>
In der Variable wird folgendes gespeichert:
'xx ! ! xaaax'
Beispiel
In diesem Beispiel sieht das Suchmuster so aus:
Buchstabe 'x', Buchstabe 'a' zwei
Mal oder öfter, Buchstabe 'x':
<?php
$str = 'xx xax xaax xaaax';
$res = preg_replace('#xa{2,}x#', '!', $str);
?>
In der Variable wird folgendes gespeichert:
'xx xax ! !'
Beispiel
In diesem Beispiel sieht das Suchmuster so aus:
Buchstabe 'x', Buchstabe 'a' drei
Mal, Buchstabe 'x':
<?php
$str = 'xx xax xaax xaaax';
$res = preg_replace('#xa{3}x#', '!', $str);
?>
In der Variable wird folgendes gespeichert:
'xx xax xaax !'
Beispiel
In diesem Beispiel sieht das Suchmuster so aus:
Buchstabe 'a' zehn Mal:
<?php
$str = 'aaa aaaaaaaaaa aaa';
$res = preg_replace('#a{10}#', '!', $str);
?>
In der Variable wird folgendes gespeichert:
'aaa ! aaa'
Beispiel
In diesem Beispiel wollte der Autor des Codes ein solches Muster:
Buchstabe 'x', Buchstabe 'a' drei
Mal oder weniger, Buchstabe 'x',
aber leider funktioniert so etwas - {,3} -
nicht. Es muss explizit angegeben werden:
<?php
$str = 'xx xax xaax xaaax';
$res = preg_replace('#xa{1,3}x#', '!', $str);
?>
In der Variable wird folgendes gespeichert:
'xx ! ! !'
Beispiel
Null ist auch erlaubt:
<?php
$str = 'xx xax xaax xaaax';
$res = preg_replace('#xa{0,3}x#', '!', $str);
?>
In der Variable wird folgendes gespeichert:
'! ! ! !'
Praktische Aufgaben
Gegeben ist ein String:
<?php
$str = 'aa aba abba abbba abbbba abbbbba';
?>
Schreiben Sie einen regulären Ausdruck, der die Strings
'abba', 'abbba', 'abbbba'
und nur diese findet.
Gegeben ist ein String:
<?php
$str = 'aa aba abba abbba abbbba abbbbba';
?>
Schreiben Sie einen regulären Ausdruck, der die Strings
der Art 'aba' findet, in denen 'b'
weniger als drei Mal (inklusive) vorkommt.
Gegeben ist ein String:
<?php
$str = 'aa aba abba abbba abbbba abbbbba';
?>
Schreiben Sie einen regulären Ausdruck, der die Strings
der Art 'aba' findet, in denen 'b'
mehr als vier Mal (inklusive) vorkommt.