Général

Les PCRE

Les POSIX

Pratique

Linux

Spécial php

Les billets de fred

Les assertions... moins simple ! (Partie II)


Pour rappel, les motifs sont réalisés au moyen de symboles spécifiques =>[ Symboles ]

Le vrai visage de l'assertion !

Comme vous avez pu le constater dans la partie 1 de ce tuto sur les assertions simples, l'assertion \b ou limite de mot \b ne consomme pas de caractère.

On peut donc considérer une assertion simple comme un pointeur qui se trouverait, non pas sur un caractère ou un autre, mais juste entre les deux.
Ce qui en clair signifie que l'assertion simple ne cherche pas à trouver une concordance mais bien à vérifier une position.

Nous allons travailler maintenant avec les assertions proprement dite.
Comme pour les assertions simples, elles se positionnent à un certain endroit et analysent les caractères suivants ou précédents. (lookahead et lookbehind)

/!\ Vous vous souvenez sûrement que j'ai dit de ne pas utiliser le ! comme délimiteur
des PCRE parce qu'il était utilisé dans les assertions.
Vous y êtes là, regardez !


Les assertions sont au nombre de 4 :
Type Motif Résultat
Assertion avant positive (?=motif) Vrai si le motif est vérifié
Assertion avant negative (?!motif) Vrai si le motif échoue
Assertion arrière positive (?<=motif) Vrai si le motif est vérifié
Assertion arrière négative (?<!motif) Vrai si le motif échoue

Assertion avant => lookahead => déplace le pointeur vers l'avant.
Assertion arrière => lookbehind => déplace le pointeur vers l'arrière.


C'est parti, on va mettre ça en pratique ce sera mieux !

Cela faisait bien longtemps que je vous parlais de l'assertion et de l'emploi de ! comme délimiteur de regex PCRE. Vous ne saviez pas pourquoi et à de multiples reprises vous m'avez demandé de faire un article afin de définir correctement le problème du délimiteur de regex.

Exemple d'une assertion arrière négative :

<?php
$texte = 'exemple de texte avec des noms des surnoms et des prenoms';

preg_match('#((?<!pre)noms)#', $texte);

L'exemple suivant va matcher ceci : exemple de texte avec des noms des surnoms et des prenoms



ADAM Benjamin 2008 | Admin