本文介绍正则式函数基本语法及示例。
日志服务支持如下正则式函数。
函数名称 |
语法 |
说明 |
regexp_extract_all( x , regular expression ) |
提取目标字符串中符合正则表达式的子串,并返回所有子串的合集。 |
|
regexp_extract_all( x , regular expression , n ) |
提取目标字符串中符合正则表达式的子串,然后返回与目标捕获组匹配的子串合集。 |
|
regexp_extract( x , regular expression ) |
提取并返回目标字符串中符合正则表达式的第一个子串。 |
|
regexp_extract( x , regular expression , n ) |
提取目标字符串中符合正则表达式的子串,然后返回与目标捕获组匹配的第一个子串。 |
|
regexp_like( x , regular expression ) |
判断目标字符串是否符合正则表达式。 |
|
regexp_replace( x , regular expression ) |
删除目标字符串中符合正则表达式的子串,返回未被删除的子串。 |
|
regexp_replace( x , regular expression , replace string ) |
替换目标字符串中符合正则表达式的子串,返回被替换后的字符串。 |
|
regexp_split( x , regular expression ) |
使用正则表达式分割目标字符串,返回被分割后的子串合集。 |
使用正则式函数提取字符串中的单引号(')时,需要在正则表达式中再添加一个单引号(')进行提取。具体示例,请参见 regexp_extract函数(示例3) 。
regexp_extract_all函数
regexp_extract_all函数用于提取目标字符串中符合正则表达式的子串。
语法
-
提取目标字符串中符合正则表达式的子串,并返回所有子串的合集。
regexp_extract_all(x, regular expression)
-
提取目标字符串中符合正则表达式的子串,然后返回与目标捕获组匹配的子串合集。
regexp_extract_all(x, regular expression, n)
参数说明
参数 |
说明 |
x |
参数值为varchar类型。 |
regular expression |
包含捕获组的正则表达式。例如
|
n |
第n个捕获组。n为从1开始的整数。 |
返回值类型
array类型。
示例
-
示例1:提取
server_protocol
字段值中所有的数字。-
字段样例
server_protocol:HTTP/2.0
-
查询和分析语句( 调试 )
*| SELECT regexp_extract_all(server_protocol, '\d+')
-
查询和分析结果
-
-
示例2:提取
http_user_agent
字段值中的Chrome部分,然后统计由Chrome浏览器发起的请求数量。-
字段样例
http_user_agent:Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/535.1 (KHTML, like Gecko) Chrome/14.0.803.0 Safari/535.1
-
查询和分析语句( 调试 )
*| SELECT regexp_extract_all(http_user_agent, '(Chrome)',1) AS Chrome, count(*) AS count GROUP BY Chrome
-
查询和分析结果
-
regexp_extract函数
regexp_extract函数用于提取目标字符串中符合正则表达式的子串。
语法
-
提取并返回目标字符串中符合正则表达式的第一个子串。
regexp_extract(x, regular expression)
-
提取目标字符串中符合正则表达式的子串,然后返回与目标捕获组匹配的第一个子串。
regexp_extract(x, regular expression, n)
参数说明
参数 |
说明 |
x |
参数值为varchar类型。 |
regular expression |
包含捕获组的正则表达式。例如
|
n |
第n个捕获组。n为从1开始的整数。 |
返回值类型
varchar类型。
示例
-
示例1:提取
server_protocol
字段值中的第一个数字。-
字段样例
server_protocol:HTTP/2.0
-
查询和分析语句( 调试 )
*|SELECT regexp_extract(server_protocol, '\d+')
-
查询和分析结果
-
-
示例2:提取
request_uri
字段值中的文件部分,然后统计各个文件的访问次数。-
字段样例
request_uri:/request/path-3/file-5
-
查询和分析语句( 调试 )
* | SELECT regexp_extract(request_uri, '.*\/(file.*)', 1) AS file, count(*) AS count GROUP BY file
-
查询和分析结果
-
-
示例3:提取
message
字段值中的单引号(')和数字部分。-
字段样例
message:error'1232
-
查询和分析语句
* | SELECT regexp_extract(message, '''\d+')
说明使用正则式函数提取字符串中的单引号(')时,需要在正则表达式中再添加一个单引号(')。
-
查询和分析结果
-
regexp_like函数
regexp_like函数用于判断目标字符串是否符合正则表达式。
语法
regexp_like(x, regular expression)
参数说明
参数 |
说明 |
x |
参数值为varchar类型。 |
regular expression |
正则表达式。 |
返回值类型
boolean类型。
示例
判断 server_protocol 字段值中是否包含数字。
-
字段样例
server_protocol:HTTP/2.0
-
查询和分析语句( 调试 )
*| select regexp_like(server_protocol, '\d+')
-
查询和分析结果
regexp_replace函数
删除或替换目标字符串中符合正则表达式的子串。
语法
-
删除目标字符串中符合正则表达式的子串,返回未被删除的子串。
regexp_replace(x, regular expression)
-
替换目标字符串中符合正则表达式的子串,返回被替换后的字符串。
regexp_replace(x, regular expression, replace string)
参数说明
参数 |
说明 |
x |
参数值为varchar类型。 |
regular expression |
正则表达式。 |
replace string |
用于替换的子串。 |
返回值类型
varchar类型。
示例
-
示例1:将
region
字段值中以cn
开头的地域名都替换为 中国 ,然后统计来自中国的请求数量。-
字段样例
region:cn-shanghai
-
查询和分析语句( 调试 )
* | select regexp_replace(region, 'cn.*','中国') AS region, count(*) AS count GROUP BY region
-
查询和分析结果
-
-
示例2:删除
server_protocol
字段值中的版本号部分,然后统计不同通信协议对应的请求数量。-
字段样例
server_protocol:HTTP/2.0
-
查询和分析语句( 调试 )
*| select regexp_replace(server_protocol, '.\d+') AS server_protocol, count(*) AS count GROUP BY server_protocol
-
查询和分析结果
-
regexp_split函数
regexp_split函数用于分割目标字符串,返回被分割后的子串合集。
语法
regexp_split(x, regular expression)
参数说明
参数 |
说明 |
x |
参数值为varchar类型。 |
regular expression |
正则表达式。 |
返回值类型
array类型。
示例
使用正斜线(/)分割
request_uri
字段的值。
-
字段样例
request_uri:/request/path-0/file-7
-
查询和分析语句( 调试 )
* | SELECT regexp_split(request_uri,'/')
-
查询和分析结果