正则式函数

最近更新时间: 2026-03-13 09:03:00

本文介绍正则式函数基本语法及示例。
日志服务支持如下正则式函数:

函数名称语法说明
regexp_extract_all 函数regexp_extract_all(x, regular expression) 提取目标字符串中符合正则表达式的子串,并返回所有子串的合集。
regexp_extract_all 函数regexp_extract_all(x, regular expression, n)提取目标字符串中符合正则表达式的子串,并返回与目标捕获组匹配的子串合集。
regexp_extract 函数regexp_extract(x, regular expression) 提取并返回目标字符串中符合正则表达式的第一个子串。
regexp_extract 函数regexp_extract(x, regular expression, n)提取目标字符串中符合正则表达式的子串,然后返回与目标捕获组匹配的第一个子串。
regexp_like 函数regexp_like(x, regular expression)判断目标字符串是否符合正则表达式。
regexp_replace 函数regexp_replace(x, regular expression)删除目标字符串中符合正则表达式的子串,返回未被删除的子串。
regexp_replace 函数regexp_replace(x, regular expression, replace string)替换目标字符串中符合正则表达式的子串,返回被替换后的字符串。
regexp_split 函数regexp_split(x, regular expression)使用正则表达式分割目标字符串,返回被分割后的子串合集。

regexp_extract_all 函数

regexp_extract_all 函数用于提取目标字符串中符合正则表达式的子串合集。

语法

  • 提取目标字符串中符合正则表达式的子串,并返回所有子串的合集。

    regexp_extract_all(x, regular expression)
    
  • 提取目标字符串中符合正则表达式的子串,然后返回与目标捕获组匹配的子串合集。

    regexp_extract_all(x, regular expression, n)
    

参数说明

参数 说明
x 参数值为 varchar 类型。
regular expression 正则表达式,例如\d+。同时支持捕获组,例如(\d)(\d)(\d)
n 第 n 个捕获组。n 为从1开始的整数。

返回值类型

Array 类型。

示例

提取 http_protocol 字段中所有的数字,其中 http_protocol 的值为 HTTP/1.1。

  • 查询和分析语句

    * | SELECT regexp_extract_all(http_protocol, '\d+')
    
  • 查询和分析结果

    [1,1]
    

regexp_extract 函数

regexp_extract 函数用于提取目标字符串中符合正则表达式的第一个子串。

语法

  • 提取并返回目标字符串中符合正则表达式的第一个子串。

    regexp_extract(x, regular expression)
    
  • 提取目标字符串中符合正则表达式的子串,然后返回与目标捕获组匹配的第一个子串。

    regexp_extract(x, regular expression, n)
    

参数说明

参数 说明
x 参数值为 varchar 类型。
regular expression 正则表达式,例如\d+。同时支持捕获组,例如(\d)(\d)(\d)
n 第 n 个捕获组。n 为从1开始的整数。

返回值类型

Varchar 类型。

示例

提取 http_protocol 字段值中的第一个数字,其中 http_protocol 的值为 HTTP/1.1。

  • 查询和分析语句

    * | SELECT regexp_extract(http_protocol, '\d+')
    
  • 查询和分析结果

    1
    

regexp_like 函数

regexp_like 函数用于判断目标字符串是否符合正则表达式。

语法

regexp_like(x, regular expression)

参数说明

参数 说明
x 参数值为 varchar 类型。
regular expression 正则表达式。

返回值类型

Boolean 类型。

示例

判断 server_protocol 字段值中是否包含数字,其中 server_protocol 的值为 HTTP/1.1。

  • 查询和分析语句

    * | select regexp_like(server_protocol, '\d+')
    
  • 查询和分析结果

    TRUE
    

regexp_replace 函数

regexp_replace 函数用于删除或替换目标字符串中符合正则表达式的子串。

语法

  • 删除目标字符串中符合正则表达式的子串,返回未被删除的子串。

    regexp_replace(x, regular expression)
    
  • 替换目标字符串中符合正则表达式的子串,返回被替换后的字符串。

    regexp_replace(x, regular expression, replace string)
    

参数说明

参数 说明
x 参数值为 varchar 类型。
regular expression 正则表达式。
replace string 用于替换的子串.

返回值类型

String 类型。

示例

删除 server_protocol 字段值中的版本号部分,并统计不同通信协议对应的请求数量,其中 server_protocol 的值为 HTTP/1.1。

  • 查询和分析语句

    * | select regexp_replace(server_protocol, '.\d+') AS server_protocol, count(*) AS count GROUP BY server_protocol
    
  • 查询和分析结果

    server_protocol count
    HTTP 357

regexp_split 函数

regexp_split 函数用于分割目标字符串,返回被分割后的子串合集。

语法

regexp_split(x, regular expression)

参数说明

参数 说明
x 参数值为 varchar 类型。
regular expression 正则表达式。

返回值类型

Array 类型。

示例

使用正斜线(/)分割 server_protocol 字段的值,其中 server_protocol 的值为 HTTP/1.1。

  • 查询和分析语句

    * | select regexp_split(server_protocol, '/')
    
  • 查询和分析结果

    ["HTTP","1.1"]