Citation :
Les sous-masques conditionnels
Il est possible de lier un sous-masque à une condition, ou de
choisir entre deux sous-masques alternatifs, en fonction du
résultat d'une assertion, ou suivant les résultats
de recherche précédents.
Les deux formes possibles de sous-masques conditionnels sont
(?(condition)masque positif) et
(?(condition) masque positif | masque négatif).
Si les conditions sont satisfaites, le masque positif est utilisé,
sinon, le masque négatif est utilisé, si présent.
S'il y a plus de deux alternatives, une erreur est générée
à la compilation.
Il y a deux types de conditions : si le texte entre les parenthèses
est une séquence de chiffres, alors la condition est satisfaite si
le sous-masque correspondant à ce numéro a réussi.
Considérons le masque suivant, qui contient des espaces non significatifs pour le rendre plus compréhensible (on supposera
l'option PCRE_EXTENDED activée) et qui est divisé en trois parties
pour simplifier les explications : ( \( )? [^()]+ (?(1) \) ).
La première partie recherche une parenthèse ouvrante
optionnelle, et si elle existe, elle est capturée. La deuxième
partie recherche un séquence de caractères qui ne contiennent
pas de parenthèses. La troisième partie est
conditionnée à la première, et s'assure que si il
y avait une parenthèse ouvrante, il en existe une fermante.
Si une parenthèse ouvrante a été trouvée,
elle a été capturée, et donc la première capture existe, et la condition est exécutée. Sinon, elle est
ignorée.
|