Funções de expressão regular

As funções de expressão regular identificam padrões de caracteres precisos e são úteis para validação de dados, por exemplo, verificações de tipos, verificações de intervalos e verificações de caracteres que não são permitidos. As funções de expressão regular suportadas são totalmente compatíveis com Perl v5.

Uma descrição de como as expressões regulares operam está além do escopo deste documento. Para obter informações adicionais, consulte os vários textos que descrevem como construir expressões regulares Perl.

As funções de expressão regular aplicam o padrão regexp recursivamente a várias partes do valor de entrada até que uma das condições a seguir ocorra:
  • Uma correspondência é localizada. A função retorna o valor de correspondência.
  • Uma correspondência não é localizada para o padrão na posição atual; a função repete o processo de procura usando outra parte do padrão.

Há um limite no número de vezes em que a função repete a execução com um novo padrão de procura. No kit de ferramentasIBM® SQL Extensions versão 1.3 e posteriores, o limite é de 10.000.000 de recursões, que é o padrão geralmente aceito. (Em liberações anteriores, o limite padrão era 10.000.) Se o limite for atingido antes que uma correspondência seja encontrada, a função exibirá o erroERROR: 0 : Regex exec: Match limit reached, consider rewriting the pattern.

O limite recursivo não limita a sequência de procura de entrada; ele controla o esforço que é gasto para corresponder padrões "extremos" como padrões aninhados e ilimitados. Considere o exemplo a seguir:
https?://([-\w\.]+)+(:\d+)?(/([\w/_\.]*(?\S+)))
O padrão que é destacado em negrito resulta em uma procura para corresponder uma ou mais ocorrências de (uma ou mais ocorrências de alfanuméricos). Este padrão resulta em recursões desnecessárias que podem atingir rapidamente o limite com sequência de entrada moderadas a grandes. Uma melhor opção é mudar o padrão de procura para uma forma mais eficiente, como a seguir:
https?://([-\w\.]+)(:\d+)?(/([\w/_\.]*(?\S+)))