Expresiones regulares

Se aplica a:casilla marcada como Sí Databricks SQL casilla marcada como Sí Databricks Runtime

Una expresión regular (regex) es un patrón que describe un conjunto de cadenas. Varios Azure Databricks operadores y funciones SQL toman una expresión regular para que coincida, busque, cuente, extraiga, reemplace o divida texto:

Los operadores like e ilikeno usan expresiones regulares. Usan un lenguaje de patrones más sencillo basado en _ y %.

Motor regex

Azure Databricks evalúa expresiones regulares mediante el motor de Javajava.util.regex. Los patrones deben seguir Java sintaxis de expresión regular, que es ampliamente compatible con expresiones regulares de estilo Perl, pero difiere en algunos detalles. Para obtener la referencia completa y autoritativa, consulte la documentación de Java Pattern clase.

En las secciones siguientes se describen las construcciones más usadas.

Clase de caracteres

Construir Coincidencias
. Cualquier carácter único excepto un terminador de línea (a menos que se establezca la s marca).
[abc] Cualquiera de los caracteres enumerados: a, bo c.
[^abc] Cualquier carácter único que noa sea , bo c.
[a-z] Cualquier carácter del intervalo a a través zde .
\d, \D Un dígito ([0-9]); \D coincide con cualquier no dígito.
\w, \W Un carácter de palabra ([a-zA-Z_0-9]); \W coincide con cualquier carácter que no sea de palabra.
\s, \S Carácter de espacio en blanco; \S coincide con cualquier carácter que no sea de espacio en blanco.

Delimitadores y límites

Construir Coincidencias
^ Inicio de la entrada (o de una línea con la m marca).
$ Final de la entrada (o de una línea con la m marca).
\b, \B Límite de palabras; \B coincide con un límite que no sea de palabras.

Cuantificadores

Los cuantificadores especifican cuántas veces debe coincidir el elemento anterior. De forma predeterminada, los cuantificadores son expansos y coinciden tanto como sea posible. Anexe ? para hacer que un cuantificador sea renuente (coincida lo menos posible), por ejemplo .*?.

Construir Coincide con el elemento anterior...
* Cero o más veces.
+ Una o varias veces.
? Cero o una vez.
{n} Exactamente n las veces.
{n,} Al menos n veces.
{n,m} Entre n y m horas.

Grupos y alternancia

Construir Description
(...) Un grupo de captura. Use el índice de grupo con regexp_extract.
(?:...) Un grupo que no es de captura. Grupos sin capturar la coincidencia.
a\|b Alternancia. Coincide con a o b.

Marcas insertadas

Coloque una marca al principio del patrón para cambiar la coincidencia de todo el patrón.

Bandera Effect
(?i) Coincidencia sin distinción entre mayúsculas y minúsculas.
(?s) Modo Dotall. . coincide con los terminadores de línea.
(?m) Modo multilínea. ^ y $ coinciden en saltos de línea.
(?x) Modo de comentarios. Omite los espacios en blanco sin escape en el patrón.

Por ejemplo, (?i)ste(v\|ph)en coincide con Steven, stevene STEPHEN independientemente del caso.

Literales de escape y cadena

Para que coincida con un carácter que también sea un metacaracter regex (como ., *, (, [o \), preceda a una barra diagonal inversa. Por ejemplo, \. coincide con un punto literal y \\ coincide con una barra diagonal inversa literal.

Dado que una barra diagonal inversa también es el carácter de escape en literales de cadena SQL normales, debe duplicar cada barra diagonal inversa que pretende pasar al motor de expresiones regulares. Por ejemplo, para pasar el patrón \d+ a una función, escríbalo como '\\d+' en un literal de cadena normal.

Para evitar este doble escape, use un raw-literal (r prefijo), que deshabilita el preprocesamiento de caracteres de escape. En un literal sin procesar, escriba el patrón exactamente como el motor regex espera:

-- Regular string literal: backslashes must be doubled.
> SELECT regexp_substr('item 42 in stock', '\\d+');
 42

-- Raw literal: write the pattern as-is.
> SELECT regexp_substr('item 42 in stock', r'\d+');
 42

Patrones comunes

Los siguientes patrones cubren tareas frecuentes. Se escriben como literales sin formato para que las barras diagonales inversas pasen al motor regex sin cambios. Los patrones de correo electrónico, dirección URL e IP son ilustraciones intencionadamente simples, no validadores estrictos.

Objetivo Pattern
Entero, firmado opcionalmente r'-?\d+'
Número decimal r'-?\d+(\.\d+)?'
Una palabra r'\w+'
Solo palabra cat completa r'\bcat\b'
Dirección de correo electrónico (simple) r'[\w.%+-]+@[\w.-]+\.\w{2,}'
Host en una dirección URL r'https?://([^/]+)'
Dirección IPv4 (no comprueba de 0 a 255) r'\d{1,3}(\.\d{1,3}){3}'
Fecha ISO (YYYY-MM-DD) r'\d{4}-\d{2}-\d{2}'
Espacios en blanco iniciales o finales r'^\s+\|\s+$'
Número de teléfono de EE. UU. (simple) r'\d{3}-\d{3}-\d{4}'

Word límites (\b) coinciden con un word completo en lugar de una subcadena:

-- 'cat' as a standalone word
> SELECT 'the cat sat on the mat' rlike r'\bcat\b';
 true

-- 'cat' only as part of a larger word
> SELECT 'category' rlike r'\bcat\b';
 false

Combine un prefijo literal con un cuantificador para extraer un token estructurado, como un identificador de pedido:

> SELECT regexp_substr('Ref: ORD-12345 shipped on 2024-03-15', r'ORD-\d+');
 ORD-12345

Elección de la función correcta

Use esta tabla para elegir la función que coincide con el objetivo.

Quieres... Use
Compruebe si una cadena coincide. rlike / regexp / regexp_like
Devuelve la primera subcadena coincidente. regexp_substr
Devuelve un grupo de captura. regexp_extract
Devuelve todas las coincidencias. regexp_extract_all
Devuelve la posición de una coincidencia. regexp_instr
Contar el número de coincidencias. regexp_count
Reemplace las coincidencias por otro texto. regexp_replace
Dividir una cadena alrededor de las coincidencias. split
Coincide con un patrón simple _ / % . como / ilike