Groupes de capture d'expressions rationnelles
Vous pouvez utiliser une paire de parenthèses autour d'un sous-modèle dans une expression régulière pour définir un
groupe
. Vous pouvez utiliser des groupes d'expressions rationnelles pour :- Appliquez les opérateurs d'expressions rationnelles et les quantificateurs à un groupe entier en même temps.
- Créez un groupe de capture.Vous pouvez utiliser des groupes de capture pour spécifier des valeurs correspondantes à enregistrer ou à renvoyer dans votre expression rationnelle. Par défaut, un groupecapturele texte qui génère une correspondance. La partie de la chaîne qui correspond à la sous-expression groupée est capturée en mémoire pour être utilisée ou récupérée ultérieurement.
- Créez un groupe sans capture.
Numérotation des groupes
Une expression régulière peut avoir plusieurs groupes et les groupes peuvent être imbriqués. Les groupes sont numérotés de 1
à 1
de gauche à droite, en commençant par la première parenthèse ouvrante. Il existe toujours un groupe implicite zéro (0) qui contient la totalité de la correspondance. Exemple :(a(b*))+(c)
Ce modèle contient 3 groupes :
group 1: (a(b*)) group 2: (b*) group 3: (c)
Groupes de capture et fonction REGEX
Vous pouvez utiliser la
REGEX
Fonction d'extraction d'une partie d'une chaîne. Le REGEX
La fonction renvoie uniquement la valeur du premier
groupe de capture.Supposons que votre nom de champ, appelé
e-mail
, contienne des adresses e-mail utilisant ce modèle : utilisateur
@fournisseur
.domaine
. Vous pouvez utiliser la REGEX
pour renvoyer uniquement la partie du fournisseur
de l'adresse e-mail du champ d'e-mail
:REGEX([email],"^[a-zA-Z0-9._%+-]+@
([a-zA-Z0-9._-]+)
\.[a-zA-Z]{2,4}$")Groupes de capture et fonction REGEX_REPLACE
Vous pouvez utiliser la
REGEX_REPLACE
pour mettre en correspondance une chaîne et remplacer les chaînes correspondantes par une autre valeur. Le REGEX_REPLACE
La fonction prend 3 arguments :- Chaîne de saisie
- Expression rationnelle de correspondance
- Expression rationnelle de remplacement
Vous pouvez utiliser des groupes de capture pour capturer des références rétroactives, mais la correspondance complète est toujours affichée.
Groupes de capture et références rétroactives
Vous pouvez utiliser une référence rétroactive pour revenir au contenu correspondant d'un numéro de groupe de capture particulier. En règle générale, vous utilisez une référence rétroactive dans la même expression rationnelle qui contient le groupe de capture. Pour indiquer une référence rétroactive, indiquez le numéro de groupe précédé d'une barre oblique. Utiliser
\1
Pour faire référence au groupe de capture 1, \2
pour faire référence au groupe de capture 2, etc.Supposons que vous souhaitiez mettre en correspondance une paire de marqueurs HTML et le texte associé. Vous pouvez capturer la balise d'ouverture dans un groupe de capture, puis utiliser une référence rétroactive pour faire correspondre la balise de fermeture correspondante :
(<([A-Z][A-Z0-9]*)\b[^>]*>.*?</\2>)
Cette expression régulière contient deux groupes de capture :
- Le groupe 1 contient les parenthèses les plus externes et capture la chaîne entière.
- Le groupe 2 capture la chaîne correspondante par[A-Z][A-Z0-9]*.
Vous pouvez ensuite faire référence au groupe 2 en utilisant le
\2
afin qu'il corresponde au marqueur HTML de fermeture correspondant. Lorsque vous utilisez la
REGEX_REPLACE
Pour la fonction , vous pouvez utiliser une référence rétroactive pour faire référence à un groupe de capture dans l'expression rationnelle précédente
. La syntaxe est légèrement différente lorsque vous utilisez une référence pour faire référence à un groupe dans l'expression rationnelle précédente. Utilisez un signe de dollar ().$
) avant le numéro de groupe, par exemple $1
pour indiquer une référence rétroactive au groupe 1 de l'expression précédente. Supposons que vous avez un champ
Phone_number
où les valeurs sont formatées comme suit : xxx.xxx.xxxx
. L'exemple suivant met en correspondance les valeurs de Phone_number
et les remplace par des valeurs du format suivant : (xxx)
xxx-xxxx
:REGEX_REPLACE([phone_number],"([0-9]{3})\.([[0-9]]{3})\.([[0-9]]{4})","\($1\) $2-$3")
Notez les références rétroactives dans l'expression de remplacement. Ils font référence aux groupes de capture de l'expression correspondante précédente.
Groupes non inclus
Dans certains cas, vous pouvez utiliser des parenthèses pour regrouper des sous-modèles, mais
pas
capturer du texte. Un groupe non captureur commence par (?:
(un point d'interrogation et deux-points après la parenthèse ouvrante). Par exemple, h(?:a|i|o)t
correspondance(s) hat
ou hit
ou hot
, mais ne capture pas les a
, i
, ou o
à partir de la sous-expression.