Utilisez les fonctions d'expression régulière pour extraire, faire correspondre, remplacer et diviser des chaînes dans les requêtes SQL et SPL.
Fonctions d'expression régulière
SLS prend en charge les fonctions d'expression régulière suivantes, qui utilisent toutes la syntaxe RE2.
Si vous souhaitez utiliser des chaînes dans des instructions analytiques, vous devez les entourer de guillemets simples (''). Les chaînes non entourées de guillemets ou entourées de guillemets doubles ("") indiquent des noms de champ ou de colonne. Par exemple,
'status'
indique la chaîne « status », tandis que
status
ou
"status"
indique le champ de journal « status ».
|
Fonction |
Syntaxe |
Description |
SQL |
SPL |
|
regexp_extract_all(x, expression régulière) |
Renvoie un tableau contenant toutes les sous-chaînes correspondant à une expression régulière. |
√ |
× |
|
|
regexp_extract_all(x, expression régulière, n) |
Renvoie sous forme de tableau le groupe de capture spécifié pour toutes les correspondances. |
√ |
× |
|
|
regexp_extract(x, expression régulière) |
Renvoie la première sous-chaîne correspondant à une expression régulière. |
√ |
√ |
|
|
regexp_extract(x, expression régulière, n) |
Renvoie le n-ième groupe de capture de la première correspondance. |
√ |
√ |
|
|
regexp_extract_bool(x, expression régulière) |
Convertit la première correspondance en BOOLEAN. Renvoie |
√ |
× |
|
|
regexp_extract_bool(x, expression régulière, n) |
Convertit le groupe de capture spécifié de la première correspondance en BOOLEAN. Renvoie |
√ |
× |
|
|
regexp_extract_long(x, expression régulière) |
Convertit la première correspondance en BIGINT. Renvoie |
√ |
× |
|
|
regexp_extract_long(x, expression régulière, n) |
Convertit le groupe de capture spécifié de la première correspondance en BIGINT. Renvoie |
√ |
× |
|
|
regexp_extract_double(x, expression régulière) |
Convertit la première correspondance en DOUBLE. Renvoie |
√ |
× |
|
|
regexp_extract_double(x, expression régulière, n) |
Convertit le groupe de capture spécifié de la première correspondance en DOUBLE. Renvoie |
√ |
× |
|
|
regexp_extract_map(x, expression régulière, clés) |
Mappe les clés fournies aux correspondances de leur groupe de capture respectif. |
√ |
× |
|
|
regexp_extract_map(x, expression régulière) |
Mappe le premier groupe de capture en tant que clés et le second en tant que valeurs. |
√ |
× |
|
|
regexp_like(x, expression régulière) |
Vérifie si une chaîne correspond à une expression régulière. |
√ |
√ |
|
|
regexp_replace(x, expression régulière) |
Supprime toutes les sous-chaînes correspondant à une expression régulière. |
√ |
√ |
|
|
regexp_replace(x, expression régulière, chaîne de remplacement) |
Remplace toutes les sous-chaînes correspondant à une expression régulière par une chaîne de remplacement. |
√ |
√ |
|
|
regexp_split(x, expression régulière) |
Divise une chaîne selon une expression régulière et renvoie les sous-chaînes résultantes dans un tableau. |
√ |
× |
Pour extraire un guillemet simple (') à l'aide d'une fonction d'expression régulière, échappez-le en le doublant : ''. L'exemple 3 de la fonction regexp_extract illustre cette approche.
Fonction regexp_extract_all
Extrait toutes les sous-chaînes correspondant à une expression régulière d'une chaîne source.
Syntaxe
-
Renvoie toutes les sous-chaînes correspondantes sous forme de tableau.
regexp_extract_all(x, regular expression) -
Renvoie toutes les correspondances d'un groupe de capture spécifié sous forme de tableau.
regexp_extract_all(x, regular expression, n)
Paramètres
|
Paramètre |
Description |
|
x |
La chaîne source. Elle doit être de type VARCHAR. |
|
expression régulière |
L'expression régulière. Elle doit contenir des groupes de capture lorsque le paramètre n est spécifié. Par exemple, |
|
n |
L'index du groupe de capture. Doit être un entier supérieur ou égal à 1. |
Valeur de retour
ARRAY
Exemples
-
Exemple 1 : extrayez tous les chiffres du champ
server_protocol.-
Champ d'exemple
server_protocol:HTTP/2.0 -
Instruction de requête et d'analyse (Test)
*| SELECT regexp_extract_all(server_protocol, '\d+') Résultats de la requête et de l'analyse : la requête renvoie
["2","0"]dans la colonne_col0, ce qui correspond à toutes les sous-chaînes numériques extraites deHTTP/2.0.
-
-
Exemple 2 : extrayez la sous-chaîne « Chrome » du champ
http_user_agentet comptez les requêtes Chrome.-
Champ d'exemple
http_user_agent:Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/535.1 (KHTML, like Gecko) Chrome/14.0.803.0 Safari/535.1 -
Instruction de requête et d'analyse (Test)
*| SELECT regexp_extract_all(http_user_agent, '(Chrome)',1) AS Chrome, count(*) AS count GROUP BY Chrome Résultats de la requête et de l'analyse : la colonne
Chromerenvoie["Chrome"]et la colonnecountrenvoie103440.
-
Fonction regexp_extract
Extrait la première sous-chaîne correspondant à une expression régulière d'une chaîne source.
Syntaxe
-
Renvoie la première sous-chaîne correspondant à une expression régulière.
regexp_extract(x, regular expression) -
Renvoie la sous-chaîne correspondant au n-ième groupe de capture.
regexp_extract(x, regular expression, n)
Paramètres
|
Paramètre |
Description |
|
x |
La chaîne source. Elle doit être de type VARCHAR. |
|
expression régulière |
L'expression régulière. Elle peut contenir des groupes de capture. Par exemple, |
|
n |
L'index du groupe de capture (indice 1). Doit être un entier positif. |
Valeur de retour
Renvoie une chaîne VARCHAR.
Exemples
SQL
-
Exemple 1 : extrayez le premier chiffre du champ
server_protocol.-
Champ d'exemple
server_protocol:HTTP/2.0 -
Instruction de requête (Test)
*|SELECT regexp_extract(server_protocol, '\d+') La requête renvoie une colonne nommée
_col0avec la valeur2.
-
-
Exemple 2 : extrayez le nom de fichier du champ
request_uriet comptez les requêtes par fichier.-
Champ d'exemple
request_uri:/request/path-3/file-5 -
Instruction de requête (Test)
* | SELECT regexp_extract(request_uri, '.*\/(file.*)', 1) AS file, count(*) AS count GROUP BY file Résultat d'exemple : la colonne file est
file-5et la colonne count est17127.
-
-
Exemple 3 : extrayez le guillemet simple (') et les chiffres du champ
message.-
Champ d'exemple
message:error'1232 -
Instruction de requête
* | SELECT regexp_extract(message, '''\d+')RemarquePour faire correspondre un guillemet simple ('), vous devez l'échapper en le doublant :
''dans la chaîne d'expression régulière. Le résultat est
'1232.
-
SPL
-
Exemple 1 : extrayez le premier chiffre du champ server_protocol.
Champ d'exemple
server_protocol:HTTP/2.0
Instruction de requête
* | extend a = regexp_extract(server_protocol, '\d+')
Résultat
a: 2
-
Exemple 2 : extrayez la partie fichier du champ
request_uri.Champ d'exemple
request_uri:/request/path-3/file-5
Instruction de requête
* | extend a = regexp_extract(request_uri, '.*\/(file.*)',1)
Résultat
Le résultat est a: file-5.
-
Exemple 3 : extrayez le guillemet simple (') et les chiffres du champ
message.Champ d'exemple
message:error'1232
Instruction de requête
* | extend a = regexp_extract(message, '''\d+')
Remarque
Pour faire correspondre un guillemet simple ('), vous devez l'échapper en le doublant : '' dans la chaîne d'expression régulière.
Résultat
1 12-19 10:39:33
a: '1232
Fonction regexp_extract_bool
Extrait la première sous-chaîne correspondante et la convertit en BOOLEAN (« true »/« false », sans distinction de casse). Renvoie null en cas d'échec.
Syntaxe
-
Convertit la première correspondance en BOOLEAN. Renvoie
nullen cas d'échec.regexp_extract_bool(x, regular expression) -
Convertit le groupe de capture spécifié issu de la première correspondance en BOOLEAN. Renvoie
nullen cas d'échec.regexp_extract_bool(x, regular expression, n)
Paramètres
|
Paramètre |
Description |
|
x |
La chaîne source. Ce paramètre est de type VARCHAR. |
|
expression régulière |
Une expression régulière contenant des groupes de capture. Par exemple, |
|
n |
L'index du groupe de capture à extraire. Ce paramètre est un entier dont l'indexation commence à 1. |
Type de valeur renvoyée
Type BOOLEAN.
Exemples
-
Extraire une valeur booléenne d'un champ.
-
Champ d'exemple
false -
Instruction de requête et d'analyse (Test)
*| select regexp_extract_bool('false', '[a-zA-Z]+') -
Résultats de la requête et de l'analyse
Renvoie une seule colonne
_col0avec une ligne de données. La valeur estfalse.
-
Fonction regexp_extract_long
Extrait une sous-chaîne correspondant à une expression régulière et la convertit en BIGINT. Renvoie null si la conversion échoue.
Syntaxe
-
Extrait la première correspondance et la convertit en BIGINT.
regexp_extract_long(x, regular expression) -
Convertit le groupe de capture spécifié issu de la première correspondance en BIGINT.
regexp_extract_long(x, regular expression, n)
Paramètres
|
Paramètre |
Description |
|
x |
La chaîne source. Ce paramètre est de type VARCHAR. |
|
expression régulière |
Une expression régulière contenant des groupes de capture. Par exemple, |
|
n |
L'index du groupe de capture à extraire. L'index est un entier dont l'indexation commence à 1. |
Type de valeur renvoyée
BIGINT
Exemples
-
Extraire le nombre du champ
time.-
Champ d'exemple
time:19/Dec/2024:06:16:06 -
Instruction de requête (Test)
*|SELECT regexp_extract_long(time, '(\d{2})/', 1) -
Résultats de la requête et de l'analyse
Renvoie une colonne nommée
_col0qui contient deux lignes, chacune avec la valeur19.
-
Fonction regexp_extract_double
Extrait une sous-chaîne correspondant à une expression régulière et la convertit en DOUBLE. Renvoie null si la conversion échoue.
Syntaxe
-
Convertit la première correspondance en DOUBLE. Renvoie
nullen cas d'échec.regexp_extract_double(x, regular expression) -
Convertit le groupe de capture spécifié issu de la première correspondance en DOUBLE. Renvoie
nullen cas d'échec.regexp_extract_double(x, regular expression, n)
Paramètres
|
Paramètre |
Description |
|
x |
La chaîne source. Son type doit être VARCHAR. |
|
expression régulière |
Une expression régulière contenant des groupes de capture. Par exemple, |
|
n |
L'index du groupe de capture à extraire. L'index est un entier commençant à 1. |
Type de valeur renvoyée
double
Exemples
-
Extraire le nombre à virgule flottante du champ
server_protocol.-
Champ d'exemple
server_protocol:HTTP/1.1 -
Instruction de requête et d'analyse (Test)
*|SELECT regexp_extract_double(server_protocol, '\d+\.\d+') -
Résultats de la requête et de l'analyse
Renvoie une colonne nommée
_col0. Cette colonne contient deux lignes, chacune avec la valeur1.1.
-
Fonction regexp_extract_map
Extrait les sous-chaînes correspondant aux groupes de capture dans une expression régulière et les renvoie sous forme de map clé-valeur.
Syntaxe
Crée une map en associant les clés fournies aux sous-chaînes correspondant aux groupes de capture respectifs.
regexp_extract_map(x, regular expression, keys)
Crée une map en utilisant une expression régulière avec deux groupes de capture qui correspondent respectivement aux clés et aux valeurs.
regexp_extract_map(x, regular expression)
Paramètres
|
Paramètre |
Description |
|
x |
La chaîne source à rechercher. Le type de données est VARCHAR. |
|
expression régulière |
Une expression régulière contenant des groupes de capture. Par exemple, |
|
keys |
Les noms de clés pour les sous-chaînes capturées. Le type de données est ARRAY(VARCHAR). Le nombre de clés doit correspondre au nombre de groupes de capture dans l'expression régulière. |
Type de valeur renvoyée
MAP(VARCHAR, VARCHAR)
Exemples
-
Exemple 1 : Extraire le nom du protocole et la version du champ server_protocol.
-
Champ d'exemple
server_protocol: 'HTTP/2.0' -
Instruction de requête
select regexp_extract_map(server_protocol, '(\w+)/([\d\.]+)', array['name', 'version']) as protocol -
Résultats de la requête et de l'analyse
La requête renvoie la map suivante dans la colonne protocol :
{"name":"HTTP","version":"2.0"}.
-
-
Exemple 2 : Extraire toutes les paires clé-valeur du champ content.
-
Champ d'exemple
content: 'verb="GET" URI="/healthz" latency="45.911µs" userAgent="kube-probe/1.30+"' -
Instruction de requête
select regexp_extract_map(content, '(\w+)="([^"]*)"') as args -
Données de sortie
{"latency":"45.911µs","verb":"GET","userAgent":"kube-probe/1.30+","URI":"/healthz"}
-
Fonction regexp_like
Vérifie si une chaîne correspond à une expression régulière.
Syntaxe
regexp_like(x, regular expression)
Paramètres
|
Paramètre |
Description |
|
x |
La chaîne source. Doit être de type VARCHAR. |
|
expression régulière |
Le modèle d'expression régulière à faire correspondre. |
Type de valeur renvoyée
BOOLEAN
Exemples
SQL
Vérifier si le champ server_protocol contient des chiffres.
-
Champ d'exemple
server_protocol:HTTP/2.0 -
Instruction de requête et d'analyse (Test)
*| select regexp_like(server_protocol, '\d+') La requête renvoie deux lignes. Les deux valeurs sont
true. Cela indique que la valeur du champ server_protocol correspond à l'expression régulière\d+(contient des chiffres).
SPL
Vérifier si le champ server_protocol contient des chiffres.
Champ d'exemple
server_protocol:HTTP/2.0
Instruction de requête et d'analyse
* |extend a = regexp_like(server_protocol, '\d+')
Résultats de la requête et de l'analyse
1 12-18 19:34:20 1.2.3.4
a: true
Fonction regexp_replace
Supprime ou remplace les sous-chaînes correspondant à une expression régulière.
Syntaxe
-
Supprime toutes les sous-chaînes d'une chaîne source qui correspondent à une expression régulière.
regexp_replace(x, regular expression) -
Remplace toutes les sous-chaînes correspondant à une expression régulière par une chaîne de remplacement.
regexp_replace(x, regular expression, replace string)
Paramètres
|
Paramètre |
Description |
|
x |
La chaîne source à rechercher. Ce paramètre doit être de type VARCHAR. |
|
expression régulière |
Le modèle d'expression régulière. |
|
chaîne de remplacement |
La chaîne de remplacement. Si omise, les sous-chaînes correspondantes sont supprimées. |
Type de valeur renvoyée
VARCHAR
Exemples
SQL
-
Exemple 1 : Dans le champ
region, remplacer les noms de région commençant parcnpar China, puis compter le nombre de requêtes provenant de Chine.-
Champ d'exemple
region:cn-shanghai -
Instruction de requête et d'analyse (Test)
* | select regexp_replace(region, 'cn.*','China') AS region, count(*) AS count GROUP BY region Résultats de la requête et de l'analyse : la requête renvoie une seule ligne où la colonne region est
Chinaet la colonne count est168871.
-
-
Exemple 2 : Supprimer le numéro de version du champ
server_protocolet compter les requêtes par protocole.-
Champ d'exemple
server_protocol:HTTP/2.0 -
Instruction de requête et d'analyse (Test)
*| select regexp_replace(server_protocol, '.\d+') AS server_protocol, count(*) AS count GROUP BY server_protocol Résultats de la requête et de l'analyse : la requête renvoie une seule ligne où
server_protocolestHTTPetcountest168871.
-
SPL
-
Exemple 1 : Remplacer tous les noms de région dans la valeur du champ
regioncommençant par « cn » par China.Champ d'exemple
region:cn-shanghai
Instruction de requête et d'analyse
* | extend a = regexp_replace(region, 'cn.*','China')
-
Résultats de la requête et de l'analyse
1 12-18 19:34:20 1.2.3.4 a: China -
Exemple 2 : Supprimer le numéro de version de la valeur du champ
server_protocol.Champ d'exemple
server_protocol:HTTP/2.0
Instruction de requête et d'analyse (Test)
* | extend a = regexp_replace(server_protocol, '.\d+')
Résultats de la requête et de l'analyse
La requête renvoie une entrée de journal qui inclut un horodatage, l'adresse IP de destination 1.2.3.4 et le champ server_protocol avec le numéro de version supprimé.
Fonction regexp_split
Divise une chaîne source en un tableau de sous-chaînes en utilisant une expression régulière comme délimiteur.
Syntaxe
regexp_split(x, regular expression)
Paramètres
|
Paramètre |
Description |
|
x |
La chaîne source. Son type de données est VARCHAR. |
|
expression régulière |
Le modèle d'expression régulière utilisé comme délimiteur. |
Type de valeur renvoyée
array
Exemple
Utiliser une barre oblique (/) pour diviser la valeur du champ request_uri.
-
Champ d'exemple
request_uri:/request/path-0/file-7 -
Instruction de requête et d'analyse (Test)
* | SELECT regexp_split(request_uri,'/') Les résultats de la requête et de l'analyse sont
["","request","path-0","file-7"].