本文介绍正则式函数基本语法及示例。
日志样例
本文基于如下日志样例介绍各个函数的查询和分析语句示例。
http_user_agent:Mozilla/5.0 (Macintosh; U; Intel Mac OS X 10_5_4; en-us) AppleWebKit/528.4+ (KHTML, like Gecko) Version/4.0dp1 Safari/526.11.2
request_uri:/request/path-1/file-9
scheme:https
server_protocol:HTTP/2.0
region:cn-shanghai
regexp_extract_all(key, regexp)函数
提取目标字段的值中符合正则表达式的子串,并返回所有子串的合集。返回值为Array类型。
- 语法
regexp_extract_all(key, regexp)
- key:字段名称,该字段的值需为VARCHAR类型。
- regexp:正则表达式。
- 示例
提取server_protocol字段中所有的数字。
*| SELECT regexp_extract_all(server_protocol, '\d+')
regexp_extract_all(key, regexp, N)函数
提取目标字段的值中符合正则表达式的子串,然后返回符合第N个捕获组中正则表达式的子串合集。返回值为Array类型。
- 语法
regexp_extract_all(key, regexp, N)
- key:字段名称,该字段的值需为VARCHAR类型。
- regexp:包含捕获组的正则表达式。例如
(\d)(\d)(\d)
表示三个捕获组。 - N:第N个捕获组。N为从1开始的整数。
- 示例
提取http_user_agent字段值中的Chrome部分,然后统计由Chrome浏览器发起的请求数量。
*| SELECT regexp_extract_all(http_user_agent, '(Chrome)',1) AS Chrome, count(*) AS count GROUP BY Chrome
regexp_extract(key, regexp)函数
提取并返回目标字段的值中符合正则表达式的第一个子串。返回值为String类型。
- 语法
regexp_extract(key, regexp)
- key:字段名称,该字段的值需为VARCHAR类型。
- regexp:正则表达式。
- 示例
提取server_protocol字段中的第一个数字。
*|SELECT regexp_extract(server_protocol, '\d+')
regexp_extract(key, regexp, N)函数
提取目标字段的值中符合正则表达式的子串,然后返回符合第N个捕获组中正则表达式的第一个子串。返回值为String类型。
- 语法
regexp_extract(key, regexp, N)
- key:字段名称,该字段的值需为VARCHAR类型。
- regexp:包含捕获组的正则表达式。例如
(\d)(\d)(\d)
表示三个捕获组。 - N:第N个捕获组,N为从1开始的整数。
- 示例
提取request_uri字段值中的文件部分,然后统计各个文件的访问次数。
* | SELECT regexp_extract(request_uri, '.*\/(file.*)', 1) AS file, count(*) AS count GROUP BY file
regexp_like(key, regexp)函数
判断目标字段的值是否符合正则表达式。返回值为BOOLEAN类型。
- 语法
regexp_like(key, regexp)
- key:字段名称,该字段的值需为VARCHAR类型。
- regexp:正则表达式。
- 示例
判断server_protocol字段的值是否包含数字。
*| select regexp_like(server_protocol, '\d+')
regexp_replace(key, regexp, string)函数
替换目标字段的值中符合正则表达式的子串,返回被替换后的字符串。返回值为String类型。
- 语法
regexp_replace(key, regexp, string)
- key:字段名称,该字段的值需为VARCHAR类型。
- regexp:正则表达式。
- value:用于替换的子串。
- 示例
将以cn开头的地域名都替换为中国,然后统计来自中国的请求数量。
* | select regexp_replace(region, 'cn.*','中国') AS region count(*) AS count GROUP BY region
regexp_replace(key, regexp)
删除目标字段的值中符合正则表达式的子串,返回未被删除的子串。返回值为String类型。
- 语法
regexp_replace(key, regexp)
- key:字段名称,该字段的值需为VARCHAR类型。
- regexp:正则表达式。
- 示例
删除server_protocol字段值中的版本号部分,然后统计不同通信协议对应的请求数量。
*| select regexp_replace(server_protocol, '.\d+') AS server_protocol, count(*) AS count GROUP BY server_protocol
regexp_split(key, regexp)
使用正则表达式分割目标字段的值。返回值为Array类型。
- 语法
regexp_split(key, regexp)
- key:字段名称,该字段的值需为VARCHAR类型。
- regexp:正则表达式。
- 示例
使用正斜线(/)分割request_uri字段的值。
* | SELECT regexp_split(request_uri,'/')
在文档使用中是否遇到以下问题
更多建议
匿名提交