hive正则匹配like,rlike,regexp,regexp_replace,regexp_extract
Posted sodaloveer
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了hive正则匹配like,rlike,regexp,regexp_replace,regexp_extract相关的知识,希望对你有一定的参考价值。
提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档
文章目录
一、LIKE
- 语法规则:A like B
1、A是字符串,B是表达式。表示能否用B去完全匹配A的内容。返回结果是True/False。
2、B只能使用简单匹配符号“ _ ” 和 “ % ”。“_”表示任意单个字符,“%”表示任意数量的字符。如果字符串A或者字符串B为NULL,则返回NULL。
3、like匹配是逐一匹配,B是否是A,要求完全一致。 - 操作类型: strings
- 返回类型: boolean或null
> select 'hello' like 'hel%';
> true
> select 'hello' like 'hel_';
> false
> select null like '%';
> NULL
> select 'hello' like null;
> NULL
- 否定:A not like B,与like适用情况相似,只是逻辑相反。
> select 'hello' not like 'hel%';
> false
> select 'hello' not like 'hel_';
> true
> select null not like '%';
> NULL
> select 'hello' not like null;
> NULL
二、RLIKE
- 语法规则:A rlike B / rlike(A, B)
1、表示B是否在A里面即可。
2、可以使用JAVA中全部正则表达式,符合为TRUE,否则为FALSE。如果字符串A或者字符串B为NULL,则返回NULL。
3、不是完全匹配,可以是从任意部位匹配。 - 操作类型: strings
- 返回类型: boolean或null
> select 'hello' rlike 'he';
> true
> select 'hello' rlike '^he';
> true
> select '2314' rlike '\\\\d+';
> true
# 证件地址包含:“村”或“组”或“乡”或“镇”
> select '广州市' rlike '["村组乡镇"]';
> false
> select '元村' rlike '["村组乡镇"]';
> true
- 否定:A not rilke B,是对RLIKE的否定。
> select 'acv' not rlike '\\\\d+';
> true
> select '2314' not rlike '\\\\d+';
> false
三、REGEXP
- 语法规则:A regexp B,功能与RLIKE相同
- 操作类型: strings
- 返回类型: boolean或null
# 识别以1为开头,接下来字符全是0-9范围。
> select '18920202978' regexp '^1[0-9]+$';
> true
> select '08920202978' regexp '^1[0-9]+$';
> false
- 否定:A not regexp B
# 剔除证件地址包含“广州”或“增城”或“番禺”或“花都”或“南沙”的号码
> select '广州市' not regexp('广州|增城|番禺|花都|南沙');
> true
> select '湛江市' not regexp('广州|增城|番禺|花都|南沙');
> false
四、REGEXP_REPLACE
- 语法规则:regexp_replace(string A,string B,string C) ,将字符串A中的符合JAVA正则表达式B的部分替换为C。
- 操作类型: strings
- 返回类型: strings
# 将 “2022-09-08” 替换成 “20220908”
# [^0-9] 不是 “0-9” 部分替换成空值
> select regexp_replace('2022-09-08','[^0-9]','')
> 20220908
> select regexp_replace('h234ney', '\\\\d+', 'o');
> honey
五、REGEXP_EXTRACT
-
语法规则:regexp_extract(string A,string pattern,int index) ,将字符串A按照pattern正则表达式的规则拆分,返回index指定的字符,index从1开始计。
第一参数:要处理的字段
第二参数:需要匹配的正则表达式
第三参数: 0是显示与之匹配的整个字符串;1是显示第一个括号里面的;2是显示第二个括号里面的字段… -
操作类型: strings
-
返回类型: strings
> select regexp_extract('http://a.m.taobao.com/i41915173660.htm','i([0-9]+)',0);
> i41915173660
> select regexp_extract('http://a.m.taobao.com/i41915173660.htm','i([0-9]+)',1);
> 41915173660
以上是关于hive正则匹配like,rlike,regexp,regexp_replace,regexp_extract的主要内容,如果未能解决你的问题,请参考以下文章