这篇说说正则式函数基本语法及示例。
日志服务支持如下正则式函数:
| 函数名称 | 语法 | 说明 |
| regexp_extract_all 函数 | regexp_extract_all(x, regular expression) | 提取目标字符串中符合正则表达式的子串,并返回所有子串的合集。 |
| | regexp_extract_all(x, regular expression, n) | 提取目标字符串中符合正则表达式的子串,并返回与目标捕获组匹配的子串合集。 |
| regexp_extract 函数 | regexp_extract(x, regular expression) | 提取并返回目标字符串中符合正则表达式的第一个子串。 |
| | regexp_extract(x, regular expression, n) | 提取目标字符串中符合正则表达式的子串,然后返回与目标捕获组匹配的第一个子串。 |
| regexp_like 函数 | regexp_like(x, regular expression) | 判断目标字符串是否符合正则表达式。 |
| regexp_replace 函数 | regexp_replace(x, regular expression) | 删除目标字符串中符合正则表达式的子串,返回未被删除的子串。 |
| | regexp_replace(x, regular expression, replace string) | 替换目标字符串中符合正则表达式的子串,返回被替换后的字符串。 |
| regexp_split 函数 | regexp_split(x, regular expression) | 使用正则表达式分割目标字符串,返回被分割后的子串合集。 |
二、语法
·提取目标字符串中符合正则表达式的子串,并返回所有子串的合集。
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 | 用于替换的子串。正则表达式中使用捕获组时,可通过 $1, $2 的方式引用对应的捕获组。 |
十九、返回值类型
String 类型。
20、示例
示例1:删除 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 |
示例2:使用*号代替原始字符串hello123world中的数字,并使用-连接字符串中的各个部分。
·查询和分析语句
* | SELECT regexp_replace('hello123world', '(hello)(\\d+)(world)', '$1-***-$3') as demo limit 1
·查询和分析结果
| demo |
| hello-***-world |
21、regexp_split 函数
regexp_split 函数用于分割目标字符串,返回被分割后的子串合集。
22、语法
regexp_split(x, regular expression)
23、参数说明
| 参数 | 说明 |
| x | 参数值为 varchar 类型。 |
| regular expression | 正则表达式。 |
24、返回值类型
Array 类型。
25、示例
使用正斜线(/)分割 server_protocol 字段的值,其中 server_protocol 的值为 HTTP/1.1。
·查询和分析语句
* | select regexp_split(server_protocol, '/')
·查询和分析结果
["HTTP","1.1"]