Sub-expressões condicionais
É possível fazer com que o processo de correspondência obedeça condicionalmente
a uma sub-expressão ou escolha entre duas sub-expressões
alternativas, dependendo do resultado de uma afirmação, ou
se uma sub-expressão de captura anterior correspondeu ou não. As
duas formas possíveis de sub-expressão condicional são
Se a condição for satisfeita, a expressão-sim é usada; caso contrário
a expressão-não (se presente) é usada. Se houver
mais que duas alternativas na sub-expressão, ocorrerá um erro
no momento da compilação.
Existem dois tipos de condição. Se o texto entre parênteses
consistir em uma sequência de dígitos, então a
condição será satisfeita se a sub-expressão de captura desse
número tiver correspondido anteriormente. Considere a seguinte expressão,
que contém espaços em branco não significativos para torná-la
mais legível (assumindo que a opção PCRE_EXTENDED
está definida) e para dividi-la em três partes para facilidade de discussão:
A primeira parte corresponde a um parêntese de abertura opcional e,
se esse caractere estiver presente, define-o como a primeira substring
capturada. A segunda parte corresponde a um ou mais caracteres
que não são parênteses. A terceira parte é uma sub-expressão
condicional que testa se o primeiro conjunto de parênteses
corresponde ou não. Se sim, ou seja, se a string começou
com um parêntese de abertura, a condição é verdadeira, e então
a expressão-sim é executada e um parêntese de fechamento é
necessário. Caso contrário, como a expressão-não não está presente, A
sub-expressão não corresponde a nada. Em outras palavras, essa expressão
corresponde a uma sequência de não-parênteses, opcionalmente entre
parênteses.
Se a condição for a string (R)
, ela será satisfeita se
uma chamada recursiva à expressão ou sub-expressão tiver sido feita. No “nível
superior”, a condição é falsa.
Se a condição não for uma sequência de dígitos ou (R), deverá ser uma
afirmação. Esta pode ser uma afirmação positiva ou negativa que olha para frente
ou que olha para trás. Considere esta expressão, novamente contendo
espaços em branco não significativos e com as duas alternativas na
segunda linha:
A condição é uma afirmação que olha para frente positiva que corresponde a
uma sequência opcional de não-letras seguidas por uma letra. Em
outras palavras, testa a presença de pelo menos uma
letra na string. Se for encontrada uma letra, a string é
comparada com a primeira alternativa; caso contrário, será
comparada com o segunda. Esta expressão corresponde a strings em
uma das duas formas dd-aaa-dd ou dd-dd-dd, onde aaa são
letras e dd são dígitos.