Une assertion est un test sur les caractères suivants ou
   précédents celui qui est en cours d'étude. Ce
   test ne consomme pas de caractères (ie, on ne déplace
   pas le pointeur de caractères). Les assertions simples sont
   codées avec \b, \B,
   \A, \Z, \z,
   ^ et $, et sont décrites
   dans les séquences d'échappement.
   Il existe cependant des types d'assertions plus complexes, codées sous la forme
   de sous-masques. Il en existe deux types : celles qui travaillent
   au-delà de la position courante, et celles qui
   travaillent en-deçà.
  
   Une assertion se comporte comme un sous-masque, hormis le fait qu'elle
   ne déplace pas le pointeur de position. Les assertions avant
   commencent par (?= pour les assertions positives, et
   par (?!, pour les assertions négatives. Par exemple :
   
   \w+(?=;)
   
   s'assure qu'un mot est suivi d'un point-virgule,
   mais n'inclut pas le point virgule dans la capture et foo(?!bar)
   trouve toutes les occurrences de "foo" qui ne sont pas suivies par "bar".
   Notez que,
   
   (?!foo)bar
   
   en est proche, mais ne trouve pas une
   occurrence de "bar" qui soit précédée
   par quelque chose d'autre que "foo"; il
   trouve toutes les occurrences de "bar",
   quel que soit ce qui le précède, car l'assertion
   
   (?!foo)
   
   est toujours vraie quand les trois caractères suivants sont
   "bar". Une assertion arrière est ici
   nécessaire.
  
   Les assertions arrières commencent par (?<=
   pour les assertions positives, et (?<! pour les
   assertions négatives. Par exemple :
   
   (?<!foo)bar
   
   trouve les occurrences de "bar" qui ne sont pas
   précédées par "foo". Le contenu d'une référence
   arrière est limité de telle façon que les chaînes qu'il utilise
   soient toujours de la même taille. Cependant, lorsqu'il
   y a plusieurs alternatives, elles n'ont pas besoin d'être
   de la même taille. Par exemple,
   
   (?<=bullock|donkey)
   
   est autorisé, tandis que
   
   (?<!dogs?|cats?)
   
   provoque une erreur de compilation. Les alternatives qui ont des
   longueurs différentes ne sont autorisées qu'au niveau
   supérieur des assertions arrière. C'est une
   amélioration du fonctionnement de Perl 5.005, qui impose
   aux alternatives d'avoir toute la même taille. Une
   assertion telle que
   
   (?<=ab(c|de))
   
   n'est pas autorisée, car l'assertion de bas niveau (la deuxième,
   ici) a deux possibilités de longueurs différentes. Pour
   la rendre acceptable, il faut écrire
   
   (?<=abc|abde)
   
   L'implémentation des assertions arrière déplace
   temporairement le pointeur de position vers l'arrière, et cherche
   à vérifier l'assertion. Si le nombre de caractères
   est différent, la position ne sera pas correcte, et l'assertion
   échouera. La combinaison d'assertions arrière avec des
   sous-masques peut être particulièrement pratique à
   fin des chaînes. Un exemple est donné à la fin de
   cette section.
  
   Plusieurs assertions peuvent intervenir successivement. Par exemple,
   le masque
   
   (?<=\d{3})(?<!999)foo
   
   recherche les chaînes "foo" précédées
   par trois chiffres qui ne sont pas "999". Notez que chaque assertion
   est appliquée indépendamment, au même point de
   la chaîne à traiter. Tout d'abord, il est
   vérifié que les trois premiers caractères ont
   tous des chiffres, puis on s'assure que ces trois caractères
   ne sont pas "999". Le masque précédant
   n'accepte pas "foo" précédé de
   6 caractères, les trois premiers étant des chiffres et
   les trois suivants étant différents de "999".
   Par exemple, ce masque n'acceptera pas la chaîne
   "123abcfoo". Pour ce faire, il faut utiliser le masque
   suivant :
   
   (?<=\d{3}...)(?<!999)foo.
   
  
   Dans ce masque, la première assertion vérifie les six premiers
   caractères, s'assure que les trois premiers sont des entiers,
   et la deuxième assertion s'assure que les trois derniers
   caractères ne sont pas "999".
  
   De plus, les assertions peuvent être imbriquées :
   
   (?<=(?<!foo)bar)baz
   
   recherche les occurrences de "baz" qui sont
   précédées par "bar", qui,
   à son tour, n'est pas précédé par
   "foo". Au contraire,
   
   (?<=\d{3}...(?<!999))foo
   
   est un autre masque, qui recherche les caractères "foo",
   précédés par trois chiffres, suivis de trois
   autres caractères qui ne forment pas "999".
  
Les assertions ne sont pas capturantes, et ne peuvent pas être répétées. Si une assertion contient des sous-masques capturants en son sein, ils seront compris dans le nombre de sous-masques capturants du masque entier. La capture est réalisée pour les assertions positives, mais cela n'a pas de sens pour les assertions négatives.
200 assertions au maximum sont autorisées.
