Uma afirmação é um teste nos caracteres posteriores ou anteriores ao ponto atual de correspondência que efetivamente não consome nenhum caractere. As afirmações simples codificadas como \b, \B, \A, \Z, \z, ^ e $ estão descritas na seção sobre sequências de escape. Afirmações mais complexas são codificadas como sub-expressões. Existem dois tipos: aquelas que olham para frente da posição atual na string de entrada e aquelas que olham para trás dela.
   Uma sub-expressão de afirmação é correspondida da maneira usual, exceto
   que ela não faz com que a posição atual de correspondência seja
   alterada. Afirmações que olham para frente iniciam com (?= para afirmações
   positivas e com (?! para afirmações negativas. Por exemplo,
   \w+(?=;)
   corresponde a uma palavra seguida por ponto-e-vírgula, mas não inclui
   o ponto-e-vírgula na correspondência, e
   foo(?!bar)
   corresponde a qualquer ocorrência de "foo" que não seja seguida por
   "bar". Observe que a expressão aparentemente similar
   (?!foo)bar
   não encontra uma ocorrência de "bar" que seja precedida por
   algo além de "foo"; ela encontra qualquer ocorrência de "bar"
   de todo modo, porque a afirmação (?!foo) é sempre true
   quando os três próximos caracteres são "bar". Uma afirmação que
   olha para trás é necessária para conseguir este efeito.
  
   Afirmações que olham para trás iniciam com (?<= para afirmações positivas
   e (?<! para afirmações negativas. Por exemplo,
   (?<!foo)bar
   encontra uma ocorrência de "bar" que não seja precedida por
   "foo". O conteúdo de uma afirmação que olha para trás é restrito
   de modo que todas as strings às quais ela corresponde precisam ter um comprimento
   fixo. No entanto, se houver várias alternativas elas não
   precisam ter todas o mesmo comprimento fixo. Assim,
   (?<=bullock|donkey)
   é permitido, mas
   (?<!dogs?|cats?)
   causa um erro no momento da compilação. Ramos que correspondem a strings
   de comprimento diferente são permitidas somente no nível mais alto de
   uma afirmação que olha para trás. Isto é uma extensão quando comparado com
   o Perl 5.005, que requer que todos os ramos correspondam ao mesmo
   comprimento de string. Uma afirmação como
   (?<=ab(c|de))
   não é permitida, porque seu ramo único no nível mais alto pode
   corresponder a dois comprimentos diferentes, mas é aceitável se for re-escrita
   para usar dois ramos no nível mais alto:
   (?<=abc|abde)
   A implementação de afirmações que olham para trás é, para cada
   alternativa, mover temporariamente a posição atual para trás
   pela largura fixa e então tentar a correspodência. Se houver
   caracteres insuficientes antes da posição atual, a
   correspondência falhará. Afirmações que olham para trás em conjunção com
   sub-expressões de ocorrência única podem ser particularmente úteis para ter correspondência
   nos finais de strings; um exemplo é mostrado no final
   da seção sobre sub-expressões de ocorrência única.
  
   Várias afirmações (de qualquer tipo) podem ocorrer sucessivamente.
   Por exemplo,
   (?<=\d{3})(?<!999)foo
   corresponde a "foo" precedida por três dígitos que não são "999".
   Note que cada afirmação é aplicada independentemente
   no mesmo ponto da string de entrada. Primeiro é
   verificado se os três caracteres anteriores são todos dígitos
   e depois é verificado se os mesmos três caracteres não são
   "999". Esta expressão não corresponde a "foo" precedida por seis
   caracteres, os primeiros três dos quais são dígitos e os últimos três
   deles não são "999". Por exemplo, ela não corresponde a
   "123abcfoo". Uma expressão para fazer isso é
   (?<=\d{3}...)(?<!999)foo
  
Agora a primeira afirmação olha para os seis caracteres precedentes, verificando se os primeiros três são dígitos e depois a segunda afirmação verifica se os três caracteres precedentes não são "999".
   Afirmações podem ser aninhadas em qualquer combinação. Por exemplo,
   (?<=(?<!foo)bar)baz
   corresponde a uma ocorrência de "baz" que é precedida por "bar"
   que por sua vez não é precedida por "foo", enquanto que
   (?<=\d{3}...(?<!999))foo
   é outra expressão que corresponde a "foo" precedida por três
   dígitos e quaisquer três caracteres que não sejam "999".
  
Sub-expressões de afirmação não são sub-expressões de captura, e podem não ser repetidas, porque não faz sentido afirmar a mesmo coisa várias vezes. Se qualquer tipo de afirmação coniver sub-expressões de captura dentro dela, estas são contadas para os propósitos de numeração dos grupos de captura em toda a expressão. Porém, a captura de substring acontece somente para afirmações positivas, porque não faz sentido para afirmações negativas.
Afirmações contam até o máximo de 200 sub-expressões entre parênteses.
