0


Hive正则表达式

前段时间,在我们数据开发的过程中,因为没有现成的数据表,导致数据没有办法直接取,需要解析日志的内容,从日志里面拿到我们想要的数据,但是日志的内容并没有那么的规则,这个时候,正则表达式就展现出很大的优势,正好我也把正则表达式温习实践了一遍,正好整理下来。

hive支持的正则表达式有三种,分别是regexp、regexp_replace、regexp_extract

一、regexp

1,语法格式: A REGEXP B
释义:A是需要匹配的字符串,B是正则表达式字符串
返回结果:boolean或null
示例SQL:

select'四川办'regexp'川办';select'四川办'regexp'湖南';

返回结果:

truefalse

二、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次

正则表达式可以根据不同的需求,找到适合自己的函数,以及规则一起搭配使用。
正则表达式的使用就分享到这里了,我是喵~~,一起交流学习哇!


本文转载自: https://blog.csdn.net/weixin_42011858/article/details/126360759
版权归原作者 晓之以理的喵~~ 所有, 如有侵权,请联系我们删除。

“Hive正则表达式”的评论:

还没有评论