Fonctions d'expression régulière

Les fonctions d'expression régulière identifient des modèles précis de caractères et sont utiles pour la validation des données, par exemple pour les contrôles de type, les contrôles de plage et les contrôles de caractères non autorisés. Les fonctions d'expression régulière prises en charge sont entièrement compatibles avec Perl v5.

La description du fonctionnement des expressions régulières dépasse le cadre de ce document. Pour plus d'informations, voir les nombreux textes qui décrivent comment construire des expressions régulières Perl

Les fonctions d'expression régulière appliquent le motif regexp de manière récursive à différentes parties de la valeur d'entrée jusqu'à ce que l'une des conditions suivantes se produise :
  • Une correspondance est trouvée. La fonction renvoie la valeur de la correspondance.
  • Aucune correspondance n'est trouvée pour le motif à la position actuelle ; la fonction répète le processus de recherche en utilisant une autre partie du motif.

Il y a une limite au nombre de fois que la fonction répète l'exécution avec un nouveau modèle de recherche. Dans IBM® SQL Extensions Toolkit Release 1.3 et suivantes, la limite est de 10 000 000 de récursions, ce qui est la valeur par défaut généralement acceptée. (Dans les versions précédentes, la limite par défaut était de 10 000) Si la limite est atteinte avant qu'une correspondance ne soit trouvée, la fonction affiche l'erreur suivanteERROR: 0 : Regex exec: Match limit reached, consider rewriting the pattern.

La limite de récursivité ne limite pas la chaîne de recherche d'entrée ; elle contrôle l'effort déployé pour faire correspondre des motifs "extrêmes" tels que des motifs imbriqués et illimités. Prenons l'exemple suivant :
https?://([-\w\.]+)+(:\d+)?(/([\w/_\.]*(?\S+)))
Le modèle mis en évidence en gras permet de rechercher une ou plusieurs occurrences de (une ou plusieurs occurrences de caractères alphanumériques). Ce schéma entraîne des récursions inutiles qui peuvent rapidement atteindre la limite avec des chaînes d'entrée de taille moyenne à grande. Une meilleure option consiste à remplacer le modèle de recherche par une forme plus efficace, comme suit :
https?://([-\w\.]+)(:\d+)?(/([\w/_\.]*(?\S+)))