| Références arrières
En dehors des classes de caractères, un antislash suivi
d'un nombre plus grand que 0 (et possiblement plusieurs chiffres)
est une référence arrière (c'est à
dire vers la gauche) dans le masque, en supposant qu'il y ait
suffisamment de sous-masques capturants précédants.
Cependant, si le nombre décimal suivant l'antislash est
plus petit que 10, il sera toujours considéré
comme une référence arrière, et cela
génèrera une erreur si le nombre de capture
n'est pas suffisant. En d'autres termes, il faut qu'il existe
suffisamment de parenthèses ouvrantes à gauche
de la référence, surtout si la référence
est inférieure à 10.
Reportez-vous à la section "antislash" pour avoir de
plus amples détails à propos du nombre de
chiffres qui suivent l'antislash.
La référence arrière remplace ce qui a
été capturé par un sous-masque dans le
masque courant, plutôt que remplace le sous-masque
lui-même. Ainsi
(calme|rapide)
et
\1ment
trouvera "
calme et calmement
"
et "
rapide et rapidement
", mais pas
"
calme et rapidement
". Si la recherche tient
compte de la casse, alors la casse de la chaîne
capturée sera importante. Par exemple,
((?i)rah)\s+\1
trouve "
rah rah
"
et "
RAH RAH
", mais pas "
RAH rah
",
même si le sous-masque capturant initial ne tenait pas compte
de la casse.
Il peut y avoir plusieurs références arrières dans
le même sous-masque. Si un sous-masque n'a pas été
utilisé dans une recherche, alors les références
arrières échoueront. Par exemple "
(a|(bc))\2
"
ne réussira jamais si la chaîne sujet commence par
"
a
" plutôt que par "
bc
".
Etant donné qu'il peyt y avoir jusqu'à 99 références
arrières, tous les chiffres après l'antislash sont
considérés comment faisant potentiellement partie de
la référence arrière. Si le masque recherche un
chiffre après la référence, alors il faut
impérativement utiliser des délimiteurs pour terminer
la référence arrière.
>
Si l'option PCRE_EXTENDED
est activée, on peut utiliser un espace.
Sinon, un commentaire vide fait l'affaire. Une référence
arrière qui intervient à l'intérieur de
parenthèses auquel elle fait référence
échouera dès que le sous-masque sera utilisé. Par exemple,
(a\1)
échouera toujours. Cependant, ces
références peuvent être utiles dans les
sous-masques répétitifs. Par exemple, le masque
"
(a|b\1)+
" pourra convenir pour "
a
",
"
aba
", "
ababaa
", etc....
A chaque itération du sous-masque, la référence
arrière utilise le résultat du dernier sous-masque.
Pour que cela fonctionne, il faut que la première
itération n'ai pas besoin d'utiliser la référence
arrière. Cela arrive avec les alternatives, comme dans
l'exemple ci-dessus, ou avec un quantificateur de minimum 0.
|