【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

猜你喜欢

转载自blog.csdn.net/sodaloveer/article/details/128610992
今日推荐