Une assertion est une "proposition, affirmative ou négative, dont on affirme la valeur de vérité" (par exemple 2 + 2 = 4).
Avec les expressions régulières, une assertion simple va permettre de définir une situation pour l'élément à rechercher ou à capturer. Par exemple on veut que le caractère soit le dernier de la ligne, ou que l'ensemble de caractères constitue un mot.
On peut ainsi voir les assertions comme un espèce de pointeur entre deux caractères, plutôt que sur un caractère, les assertions ne recherchant pas une correspondance de caractères, mais une correspondance de position.
Vous avez déjà utilisé des assertions simples avec les métacaractères ^ et $ quand vous précisez que la recherche commence ou finit avec un caractère particulier.
Il existe cinq assertions simples :
| \b | correspond à un début ou une fin de "mot" |
| \B | inverse de \b |
| \A | correspond au début de la chaîne examinée. |
| \Z | correspond à une fin de ligne ou à la fin de la chaîne examinée. |
| \z | correspond à la fin de la chaîne examinée. |
Un mot est une suite de caractères de la classe \w (une lettre majuscule ou minuscule,
caractères accentués compris, un chiffre de 0 à 9 ou le caractère _
(underscore)). Les mots sont délimités par des caractères de la
classe \W (l'inverse de la classe \w,
donc entre autres les espaces simples ou consécutifs, les
tabulations, les signes de ponctuation, les sauts de ligne).
\b est donc validé quand on passe de la
classe \w à la classe \W (et inversement).
\B est validé quand on reste dans la même
classe \w ou \W.
\A est validée quand la chaîne examinée
commence exactement comme le modèle recherché, et \z est validé quand la chaîne examinée finit
exactement comme le modèle recherché.
\A est l'équivalent du métacaractère ^, sauf
si l'option m (multiligne) est utilisée, auquel cas ^ est le début
de chaque ligne trouvée dans la chaîne, et \A
le début original de la chaîne.
\Z
est validé en fin de chaîne, ou en fin de chaque ligne si la chaîne
est multilignes. \Z est l'équivalent du
métacaractère $ avec le même comportement que \A
si l'option m (multiligne) est utilisée.
\z est validé seulement en fin de chaîne,
même si la chaîne est multiligne.
On dit qu'une assertion ne consomne pas de caractère car elle ne fait que tester le passage d'une classe à une autre ou la position début ou fin d'un caractère.
Par exemple, si nous recherchons dans une phrase tous les mots de
plus de 3 caractères, nous pourrions utiliser l'expression suivante
:
\s\w{4,}\s
Nous
recherchons toutes les suites de au moins 4 caractères de la classe
\w, séparées par des espaces.
Le résultat n'est pas bon : il manque longtemps et galaxie. C'est normal car l'espace entre bien et longtemps à été compté dans " bien ", ainsi "longtemps " ne correspond plus au modèle. L'expression a consommé les caractères recherchés. Si maintenant nous remplaçons les \s par un \b nous obtenons un résultat correct car les caractères délimiteurs de mots ne sont pas consommés par les assertions.