前段时间,在我们数据开发的过程中,因为没有现成的数据表,导致数据没有办法直接取,需要解析日志的内容,从日志里面拿到我们想要的数据,但是日志的内容并没有那么的规则,这个时候,正则表达式就展现出很大的优势,正好我也把正则表达式温习实践了一遍,正好整理下来。hive支持的正则表达式有三种,分别是regexp、regexp_replace、regexp_extract
一、regexp
1,语法格式: A REGEXP B
释义:A是需要匹配的字符串,B是正则表达式字符串
返回结果:boolean或null
示例SQL:
select '四川办' regexp '川办';
select '四川办' regexp '湖南';
返回结果:
true
false
二、regexp_replace
1,语法格式: regexp_replace(string A, string B, string C)
2,释义:将字符串A中的符合java正则表达式B的部分替换为C。注意,在有些情况下要使用转义字符,类似oracle中的regexp_replace函数。
示例SQL:
select regexp_replace('四川办第1名', '\\d+', '一');
返回结果:
四川办第一名
三、regexp_extract
1,语法格式:regexp_extract(string subject, string pattern, int index)
2,释义:将字符串subject按照pattern正则表达式的规则拆分,返回index指定的字符,index从1开始计。
示例SQL:
select regexp_extract('四川办:第1名', '([0-9]+)', 1);
返回结果:
1
四、常用的正则表达式规则:
1,元字符匹配
(.) 表示匹配除换行符以外的任意字符。
(\w) 表示匹配字母、下划线、数字 (\W匹配汉字)
(\d) 表示匹配数字
(\s) 表示匹配任意的空白符(tab 换行 空格)
([ ]) 表示匹配方括号中任一字符
([^匹配内容]) 表示不匹配方括号中任一字符
2,位置匹配
(^) 表示匹配字符串的开始,空值:^$
($) 表示匹配字符串的结束
(\b) 表示匹配单词的开始或结束。
(\B) 表示匹配非单词的开始或结束
3,频率匹配
(*) 表示匹配重复0次或多次
(+) 表示匹配重复一次或更多次
(?) 表示匹配重复0次或1次
({n}) 表示匹配重复n次
({n,}) 表示重复n次或更多次
({n,m}) 表示重复n到m次
正则表达式可以根据不同的需求,找到适合自己的函数,以及规则一起搭配使用。
正则表达式的使用就分享到这里了,我是喵~~,一起交流学习哇!