Utilice funciones de expresiones regulares para extraer, buscar coincidencias, reemplazar y dividir cadenas en consultas SQL y SPL.
Funciones de expresiones regulares
SLS admite las siguientes funciones de expresiones regulares, todas basadas en la sintaxis RE2.
Si desea utilizar cadenas en instrucciones analíticas, debe encerrarlas entre comillas simples (''). Las cadenas sin comillas o encerradas entre comillas dobles ("") indican nombres de campo o de columna. Por ejemplo,
'status'
indica la cadena status, mientras que
status
o
"status"
indican el campo de registro status.
|
Función |
Sintaxis |
Descripción |
SQL |
SPL |
|
regexp_extract_all(x, regular expression) |
Devuelve un arreglo con todas las subcadenas que coinciden con una expresión regular. |
√ |
× |
|
|
regexp_extract_all(x, regular expression, n) |
Devuelve el grupo de captura especificado de todas las coincidencias como un arreglo. |
√ |
× |
|
|
regexp_extract(x, regular expression) |
Devuelve la primera subcadena que coincide con una expresión regular. |
√ |
√ |
|
|
regexp_extract(x, regular expression, n) |
Devuelve el n-ésimo grupo de captura de la primera coincidencia. |
√ |
√ |
|
|
regexp_extract_bool(x, regular expression) |
Convierte la primera coincidencia a BOOLEAN. Devuelve |
√ |
× |
|
|
regexp_extract_bool(x, regular expression, n) |
Convierte el grupo de captura especificado de la primera coincidencia a BOOLEAN. Devuelve |
√ |
× |
|
|
regexp_extract_long(x, regular expression) |
Convierte la primera coincidencia a BIGINT. Devuelve |
√ |
× |
|
|
regexp_extract_long(x, regular expression, n) |
Convierte el grupo de captura especificado de la primera coincidencia a BIGINT. Devuelve |
√ |
× |
|
|
regexp_extract_double(x, regular expression) |
Convierte la primera coincidencia a DOUBLE. Devuelve |
√ |
× |
|
|
regexp_extract_double(x, regular expression, n) |
Convierte el grupo de captura especificado de la primera coincidencia a DOUBLE. Devuelve |
√ |
× |
|
|
regexp_extract_map(x, regular expression, keys) |
Asigna las claves proporcionadas a sus correspondientes coincidencias de grupos de captura. |
√ |
× |
|
|
regexp_extract_map(x, regular expression) |
Asigna el primer grupo de captura como claves y el segundo como valores. |
√ |
× |
|
|
regexp_like(x, regular expression) |
Comprueba si una cadena coincide con una expresión regular. |
√ |
√ |
|
|
regexp_replace(x, regular expression) |
Elimina todas las subcadenas que coinciden con una expresión regular. |
√ |
√ |
|
|
regexp_replace(x, regular expression, replace string) |
Reemplaza todas las subcadenas que coinciden con una expresión regular por una cadena de sustitución. |
√ |
√ |
|
|
regexp_split(x, regular expression) |
Divide una cadena mediante una expresión regular y devuelve las subcadenas resultantes en un arreglo. |
√ |
× |
Para extraer una comilla simple (') con una función de expresión regular, escápela duplicándola como ''. Example 3 of the regexp_extract function demuestra este enfoque.
Función regexp_extract_all
Extrae todas las subcadenas que coinciden con una expresión regular de una cadena de origen.
Sintaxis
-
Devuelve todas las subcadenas coincidentes como un arreglo.
regexp_extract_all(x, regular expression) -
Devuelve todas las coincidencias de un grupo de captura especificado como un arreglo.
regexp_extract_all(x, regular expression, n)
Parámetros
|
Parámetro |
Descripción |
|
x |
La cadena de origen. Debe ser de tipo VARCHAR. |
|
regular expression |
La expresión regular. Debe contener grupos de captura cuando se especifica el parámetro n. Por ejemplo, |
|
n |
El índice del grupo de captura. Debe ser un entero mayor o igual a 1. |
Valor devuelto
ARRAY
Ejemplos
-
Ejemplo 1: Extraer todos los dígitos del campo
server_protocol.-
Campo de muestra
server_protocol:HTTP/2.0 -
Instrucción de consulta y análisis (Probar)
*| SELECT regexp_extract_all(server_protocol, '\d+') Resultados de la consulta y el análisis: La consulta devuelve
["2","0"]en la columna_col0, que corresponden a todas las subcadenas numéricas extraídas deHTTP/2.0.
-
-
Ejemplo 2: Extraer la subcadena 'Chrome' del campo
http_user_agenty contar las solicitudes de Chrome.-
Campo de muestra
http_user_agent:Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/535.1 (KHTML, like Gecko) Chrome/14.0.803.0 Safari/535.1 -
Instrucción de consulta y análisis (Probar)
*| SELECT regexp_extract_all(http_user_agent, '(Chrome)',1) AS Chrome, count(*) AS count GROUP BY Chrome Resultados de la consulta y el análisis: La columna
Chromedevuelve["Chrome"]y la columnacountdevuelve103440.
-
Función regexp_extract
Extrae la primera subcadena que coincide con una expresión regular de una cadena de origen.
Sintaxis
-
Devuelve la primera subcadena que coincide con una expresión regular.
regexp_extract(x, regular expression) -
Devuelve la subcadena que coincide con el n-ésimo grupo de captura.
regexp_extract(x, regular expression, n)
Parámetros
|
Parámetro |
Descripción |
|
x |
La cadena de origen. Debe ser de tipo VARCHAR. |
|
regular expression |
La expresión regular. Puede contener grupos de captura. Por ejemplo, |
|
n |
El índice del grupo de captura (base 1). Debe ser un entero positivo. |
Valor devuelto
Devuelve una cadena VARCHAR.
Ejemplos
SQL
-
Ejemplo 1: Extraer el primer dígito del campo
server_protocol.-
Campo de muestra
server_protocol:HTTP/2.0 -
Instrucción de consulta (Probar)
*|SELECT regexp_extract(server_protocol, '\d+') La consulta devuelve una columna llamada
_col0con el valor2.
-
-
Ejemplo 2: Extraer el nombre del archivo del campo
request_uriy contar las solicitudes por archivo.-
Campo de muestra
request_uri:/request/path-3/file-5 -
Instrucción de consulta (Probar)
* | SELECT regexp_extract(request_uri, '.*\/(file.*)', 1) AS file, count(*) AS count GROUP BY file Resultado de muestra: La columna file es
file-5y la columna count es17127.
-
-
Ejemplo 3: Extraer la comilla simple (') y los dígitos del campo
message.-
Campo de muestra
message:error'1232 -
Instrucción de consulta
* | SELECT regexp_extract(message, '''\d+')NotaPara buscar una comilla simple ('), debe escaparla duplicándola como
''en la cadena de la expresión regular. El resultado es
'1232.
-
SPL
-
Ejemplo 1: Extraer el primer dígito del campo server_protocol.
Campo de muestra
server_protocol:HTTP/2.0
Instrucción de consulta
* | extend a = regexp_extract(server_protocol, '\d+')
Resultado
a: 2
-
Ejemplo 2: Extraer la parte del archivo del campo
request_uri.Campo de muestra
request_uri:/request/path-3/file-5
Instrucción de consulta
* | extend a = regexp_extract(request_uri, '.*\/(file.*)',1)
Resultado
El resultado es a: file-5.
-
Ejemplo 3: Extraer la comilla simple (') y los dígitos del campo
message.Campo de muestra
message:error'1232
Instrucción de consulta
* | extend a = regexp_extract(message, '''\d+')
Nota
Para buscar una comilla simple ('), debe escaparla duplicándola como '' en la cadena de la expresión regular.
Resultado
1 12-19 10:39:33
a: '1232
Función regexp_extract_bool
Extrae la primera subcadena coincidente y la convierte a BOOLEAN ("true"/"false", sin distinción entre mayúsculas y minúsculas). Devuelve null si la conversión falla.
Sintaxis
-
Convierte la primera coincidencia a BOOLEAN. Devuelve
nullsi falla.regexp_extract_bool(x, regular expression) -
Convierte el grupo de captura especificado de la primera coincidencia a BOOLEAN. Devuelve
nullsi falla.regexp_extract_bool(x, regular expression, n)
Parámetros
|
Parámetro |
Descripción |
|
x |
La cadena de origen. Este parámetro es de tipo VARCHAR. |
|
regular expression |
Una expresión regular que contiene grupos de captura. Por ejemplo, |
|
n |
El índice del grupo de captura que se va a extraer. Este parámetro es un entero con base 1. |
Tipo de valor devuelto
Tipo BOOLEAN.
Ejemplos
-
Extraer un valor booleano de un campo.
-
Campo de muestra
false -
Instrucción de consulta y análisis (Probar)
*| select regexp_extract_bool('false', '[a-zA-Z]+') -
Resultados de la consulta y el análisis
Devuelve una única columna
_col0con una fila de datos. El valor esfalse.
-
Función regexp_extract_long
Extrae una subcadena que coincide con una expresión regular y la convierte a BIGINT. Devuelve null si la conversión falla.
Sintaxis
-
Extrae la primera coincidencia y la convierte a BIGINT.
regexp_extract_long(x, regular expression) -
Convierte el grupo de captura especificado de la primera coincidencia a BIGINT.
regexp_extract_long(x, regular expression, n)
Parámetros
|
Parámetro |
Descripción |
|
x |
La cadena de origen. Este parámetro es de tipo VARCHAR. |
|
regular expression |
Una expresión regular que contiene grupos de captura. Por ejemplo, |
|
n |
El índice del grupo de captura que se va a extraer. El índice es un entero con base 1. |
Tipo de valor devuelto
BIGINT
Ejemplos
-
Extraer el número del campo
time.-
Campo de muestra
time:19/Dec/2024:06:16:06 -
Instrucción de consulta (Probar)
*|SELECT regexp_extract_long(time, '(\d{2})/', 1) -
Resultados de la consulta y el análisis
Devuelve una columna llamada
_col0que contiene dos filas, cada una con el valor19.
-
Función regexp_extract_double
Extrae una subcadena que coincide con una expresión regular y la convierte a DOUBLE. Devuelve null si la conversión falla.
Sintaxis
-
Convierte la primera coincidencia a DOUBLE. Devuelve
nullsi falla.regexp_extract_double(x, regular expression) -
Convierte el grupo de captura especificado de la primera coincidencia a DOUBLE. Devuelve
nullsi falla.regexp_extract_double(x, regular expression, n)
Parámetros
|
Parámetro |
Descripción |
|
x |
La cadena de origen. Su tipo debe ser VARCHAR. |
|
regular expression |
Una expresión regular que contiene grupos de captura. Por ejemplo, |
|
n |
El índice del grupo de captura que se va a extraer. El índice es un entero que comienza en 1. |
Tipo de valor devuelto
double
Ejemplos
-
Extraer el número de punto flotante del campo
server_protocol.-
Campo de muestra
server_protocol:HTTP/1.1 -
Instrucción de consulta y análisis (Probar)
*|SELECT regexp_extract_double(server_protocol, '\d+\.\d+') -
Resultados de la consulta y el análisis
Devuelve una columna llamada
_col0. Esta columna contiene dos filas, cada una con el valor1.1.
-
Función regexp_extract_map
Extrae subcadenas que coinciden con grupos de captura en una expresión regular y las devuelve como un mapa de clave-valor.
Sintaxis
Crea un mapa al emparejar las claves proporcionadas con las subcadenas coincidentes de los grupos de captura correspondientes.
regexp_extract_map(x, regular expression, keys)
Crea un mapa mediante una expresión regular con dos grupos de captura que coinciden con las claves y los valores, respectivamente.
regexp_extract_map(x, regular expression)
Parámetros
|
Parámetro |
Descripción |
|
x |
La cadena de origen donde buscar. El tipo de dato es VARCHAR. |
|
regular expression |
Una expresión regular que contiene grupos de captura. Por ejemplo, |
|
keys |
Los nombres de clave para las subcadenas capturadas. El tipo de dato es ARRAY(VARCHAR). El número de claves debe coincidir con el número de grupos de captura en la expresión regular. |
Tipo de valor devuelto
MAP(VARCHAR, VARCHAR)
Ejemplos
-
Ejemplo 1: Extraer el nombre del protocolo y la versión del campo server_protocol.
-
Campo de muestra
server_protocol: 'HTTP/2.0' -
Instrucción de consulta
select regexp_extract_map(server_protocol, '(\w+)/([\d\.]+)', array['name', 'version']) as protocol -
Resultados de la consulta y el análisis
La consulta devuelve el siguiente mapa en la columna protocol:
{"name":"HTTP","version":"2.0"}.
-
-
Ejemplo 2: Extraer todos los pares clave-valor del campo content.
-
Campo de muestra
content: 'verb="GET" URI="/healthz" latency="45.911µs" userAgent="kube-probe/1.30+"' -
Instrucción de consulta
select regexp_extract_map(content, '(\w+)="([^"]*)"') as args -
Datos de salida
{"latency":"45.911µs","verb":"GET","userAgent":"kube-probe/1.30+","URI":"/healthz"}
-
Función regexp_like
Comprueba si una cadena coincide con una expresión regular.
Sintaxis
regexp_like(x, regular expression)
Parámetros
|
Parámetro |
Descripción |
|
x |
La cadena de origen. Debe ser de tipo VARCHAR. |
|
regular expression |
El patrón de expresión regular con el que se busca coincidencia. |
Tipo de valor devuelto
BOOLEAN
Ejemplos
SQL
Comprobar si el campo server_protocol contiene dígitos.
-
Campo de muestra
server_protocol:HTTP/2.0 -
Instrucción de consulta y análisis (Probar)
*| select regexp_like(server_protocol, '\d+') La consulta devuelve dos filas. Ambos valores son
true. Esto indica que el valor del campo server_protocol coincide con la expresión regular\d+(contiene dígitos).
SPL
Comprobar si el campo server_protocol contiene dígitos.
Campo de muestra
server_protocol:HTTP/2.0
Instrucción de consulta y análisis
* |extend a = regexp_like(server_protocol, '\d+')
Resultados de la consulta y el análisis
1 12-18 19:34:20 1.2.3.4
a: true
Función regexp_replace
Elimina o reemplaza subcadenas que coinciden con una expresión regular.
Sintaxis
-
Elimina todas las subcadenas de una cadena de origen que coinciden con una expresión regular.
regexp_replace(x, regular expression) -
Reemplaza todas las subcadenas que coinciden con una expresión regular por una cadena de reemplazo.
regexp_replace(x, regular expression, replace string)
Parámetros
|
Parámetro |
Descripción |
|
x |
Cadena de origen donde se realiza la búsqueda. Este parámetro debe ser de tipo VARCHAR. |
|
regular expression |
Patrón de la expresión regular. |
|
replace string |
Cadena de reemplazo. Si se omite, se eliminan las subcadenas coincidentes. |
Tipo de valor devuelto
VARCHAR
Ejemplos
SQL
-
Ejemplo 1: En el campo
region, reemplace los nombres de región que comienzan concnpor China y luego cuente el número de solicitudes provenientes de China.-
Campo de muestra
region:cn-shanghai -
Instrucción de consulta y análisis (Test)
* | select regexp_replace(region, 'cn.*','China') AS region, count(*) AS count GROUP BY region Resultados de la consulta y el análisis: La consulta devuelve una sola fila donde la columna region es
Chinay la columna count es168871.
-
-
Ejemplo 2: Elimine el número de versión del campo
server_protocoly cuente las solicitudes por protocolo.-
Campo de muestra
server_protocol:HTTP/2.0 -
Instrucción de consulta y análisis (Test)
*| select regexp_replace(server_protocol, '.\d+') AS server_protocol, count(*) AS count GROUP BY server_protocol Resultados de la consulta y el análisis: La consulta devuelve una sola fila donde
server_protocolesHTTPycountes168871.
-
SPL
-
Ejemplo 1: Reemplace todos los nombres de región en el valor del campo
regionque comienzan con 'cn' por China.Campo de muestra
region:cn-shanghai
Instrucción de consulta y análisis
* | extend a = regexp_replace(region, 'cn.*','China')
-
Resultados de la consulta y el análisis
1 12-18 19:34:20 1.2.3.4 a: China -
Ejemplo 2: Elimine el número de versión del valor del campo
server_protocol.Campo de muestra
server_protocol:HTTP/2.0
Instrucción de consulta y análisis (Test)
* | extend a = regexp_replace(server_protocol, '.\d+')
Resultados de la consulta y el análisis
La consulta devuelve una entrada de registro que incluye una marca de tiempo, la dirección IP de destino 1.2.3.4 y el campo server_protocol sin el número de versión.
Función regexp_split
Divide una cadena de origen en un arreglo de subcadenas mediante una expresión regular como delimitador.
Sintaxis
regexp_split(x, regular expression)
Parámetros
|
Parámetro |
Descripción |
|
x |
Cadena de origen. Su tipo de datos es VARCHAR. |
|
regular expression |
Patrón de expresión regular utilizado como delimitador. |
Tipo de valor devuelto
array
Ejemplo
Utilice una barra diagonal (/) para dividir el valor del campo request_uri.
-
Campo de muestra
request_uri:/request/path-0/file-7 -
Instrucción de consulta y análisis (Test)
* | SELECT regexp_split(request_uri,'/') Los resultados de la consulta y el análisis son
["","request","path-0","file-7"].