Opérateurs de répétition de caractères dans les regex
Il arrive que nous souhaitions indiquer
qu'un caractère se répète un certain nombre de fois.
Si nous connaissons le nombre exact de répétitions,
nous pouvons simplement l'écrire plusieurs fois
- #aaaa#. Mais que faire si nous voulons
dire quelque chose comme : répéter une fois ou plus ?
Pour cela, il existe des opérateurs (quantificateurs)
de répétition : le plus + (une fois ou plus),
l'astérisque * (zéro fois ou plus) et
le point d'interrogation ? (zéro fois ou une fois). Ces
opérateurs agissent sur le caractère qui les précède.
Examinons le fonctionnement de ces opérateurs à l'aide d'exemples.
Exemple
Trouvons toutes les sous-chaînes selon le motif lettre
'x', lettre 'a' une fois ou plus,
lettre 'x' :
<?php
$str = 'xx xax xaax xaaax xbx';
$res = preg_replace('#xa+x#', '!', $str);
?>
En conséquence, la variable contiendra ce qui suit :
'xx ! ! ! xbx'
Exemple
Trouvons toutes les sous-chaînes selon le motif lettre
'x', lettre 'a' zéro fois ou plus,
lettre 'x' :
<?php
$str = 'xx xax xaax xaaax xbx';
$res = preg_replace('#xa*x#', '!', $str);
?>
En conséquence, la variable contiendra ce qui suit :
'! ! ! ! xbx'
Exemple
Trouvons toutes les sous-chaînes selon le motif lettre
'x', lettre 'a' zéro fois ou une fois,
lettre 'x' :
<?php
$str = 'xx xax xaax xbx';
$res = preg_replace('#xa?x#', '!', $str);
?>
En conséquence, la variable contiendra ce qui suit :
'! ! xaax xbx'
Problèmes pratiques
Soit la chaîne :
<?php
$str = 'aa aba abba abbba abca abea';
?>
Écrivez une expression régulière qui trouvera les chaînes
selon le motif : lettre 'a', lettre 'b'
une fois ou plus, lettre 'a'.
Soit la chaîne :
<?php
$str = 'aa aba abba abbba abca abea';
?>
Écrivez une expression régulière qui trouvera les chaînes
selon le motif : lettre 'a', lettre 'b'
zéro fois ou plus, lettre 'a'.
Soit la chaîne :
<?php
$str = 'aa aba abba abbba abca abea';
?>
Écrivez une expression régulière qui trouvera les chaînes
selon le motif : lettre 'a', lettre 'b'
une fois ou aucune, lettre 'a'.
Soit la chaîne :
<?php
$str = 'aa aba abba abbba abca abea';
?>
Écrivez une expression régulière qui trouvera les chaînes
'aa', 'aba', 'abba',
'abbba', sans capturer 'abca'
et 'abea'.