Grupos de captura de expresión regular
Puede usar un par de paréntesis alrededor de un subpatrón en una expresión regular para definir un
grupo
. Puede usar grupos de expresiones regulares para:- Aplique operadores y cuantificadores de expresiones regulares a todo un grupo a la vez.
- Cree un grupo de captura.Puede usar grupos de captura para especificar valores coincidentes para guardar o devolver de su expresión regular. Por defecto, un grupocapturael texto que genera una coincidencia. La parte de la cadena que coincide con la subexpresión agrupada se captura en la memoria para su posterior recuperación o uso.
- Cree un grupo sin captura.
Numeración de grupo
Una expresión regular puede tener más de un grupo y los grupos pueden estar anidados. Los grupos se numeran del 1 al
n
de izquierda a derecha, comenzando por el primer paréntesis de apertura. Siempre hay un grupo implícito cero (0), que contiene la coincidencia completa. Ejemplo:(a(b*))+(c)
Este patrón contiene tres grupos:
group 1: (a(b*)) group 2: (b*) group 3: (c)
Captura de grupos y la función REGEX
Puede utilizar el
REGEX
para extraer una parte de una cadena. El REGEX
La función solo devuelve el valor del primer
grupo de captura.Supongamos que tiene un nombre de campo llamado
correo electrónico
que contiene direcciones de correo electrónico con este patrón: nombredeusuario
@proveedor
.dominio
. Puede utilizar el REGEX
para devolver solo la parte del proveedor
de la dirección de correo electrónico del campo de correo electrónico
:REGEX([email],"^[a-zA-Z0-9._%+-]+@
([a-zA-Z0-9._-]+)
\.[a-zA-Z]{2,4}$")Captura de grupos y función REGEX_REPLACE
Puede utilizar el
REGEX_REPLACE
para que coincida con una cadena y sustituya las cadenas coincidentes por otro valor. El REGEX_REPLACE
La función toma 3 argumentos:- Cadena de entrada
- Expresión regular coincidente
- Expresión regular de sustitución
Puede utilizar grupos de captura para capturar referencias retroactivas, pero siempre se devuelve la coincidencia completa.
Captura de grupos y referencias retroactivas
Puede utilizar una referencia retroactiva para volver a hacer referencia al contenido coincidente de un número de grupo de captura en particular. Normalmente, se utiliza una referencia inversa en la misma expresión regular que contiene el grupo de captura. Para especificar una referencia inversa, haga referencia al número de grupo precedido por una barra diagonal inversa. Utilizar
\1
para hacer referencia al grupo de captura 1, \2
para hacer referencia al grupo de captura 2, y así sucesivamente.Supongamos que desea cotejar un par de etiquetas HTML y su texto adjunto. Puede capturar la etiqueta de apertura en un grupo de captura y, a continuación, utilizar una referencia inversa para que coincida con la etiqueta de cierre correspondiente:
(<([A-Z][A-Z0-9]*)\b[^>]*>.*?</\2>)
Esta expresión regular contiene dos grupos de captura:
- El grupo 1 contiene los paréntesis más externos y captura la cadena completa.
- El grupo 2 captura la cadena que coincide con[A-Z][A-Z0-9]*.
A continuación, puede hacer referencia al grupo 2 mediante el
\2
backreference para que coincida con la etiqueta HTML de cierre correspondiente. Cuando utiliza el
REGEX_REPLACE
puede usar una referencia inversa para hacer referencia a un grupo de captura en la expresión regular anterior
. La sintaxis es ligeramente diferente cuando se utiliza una referencia inversa para hacer referencia a un grupo en la expresión regular anterior. Utilice un signo de dólar ($
) antes del número de grupo, como $1
para especificar una referencia inversa al grupo 1 de la expresión anterior. Supongamos que tiene un campo
phone_number
donde los valores tienen el formato xxx.xxx.xxxx
. El siguiente ejemplo coincide con los valores de phone_number
y los sustituye por valores con el formato (xxx)
xxx-xxxx
:REGEX_REPLACE([phone_number],"([0-9]{3})\.([[0-9]]{3})\.([[0-9]]{4})","\($1\) $2-$3")
Fíjese en las referencias anteriores en la expresión de sustitución. Hacen referencia a los grupos de captura de la expresión coincidente anterior.
Grupos sin captura
En algunos casos, es posible que desee utilizar paréntesis para agrupar subpatrones, pero
no
capturar texto. Un grupo sin captura comienza con (?:
(un signo de interrogación y dos puntos después del paréntesis de apertura). Por ejemplo, h(?:a|i|o)t
coincidencias hat
o hit
o hot
, pero no captura el a
, i
, o o
de la subexpresión.