【hive编程】正则表达式经典案例

正则表达式(regular expression)描述了一种字符串匹配的模式(pattern),可以用来判断字符串是否包含某种子串、字符串本身是否符合某种模式、将匹配的子串替换、从字符串中取出符合某个条件的子串等。

一、字符串是否包含某种模式子串(regexp或rlike)

regexp和rlike都可以实现该功能,唯一的区别是使用方法不一样

select regexp('字符串','模式子串')

select '字符串' rlike '模式子串'

1、字符串是否包含汉字

select 'this is 正则表达式' rlike '\\u4E00-\\u9FFF';

二、字符串本身是否符合某种模式

判断字符串本身是否符合某种模式,则在正则表达式加上开头、结尾限制即可

1、数字判断

select regexp('12343','^\\d+$');

2、经纬度判断

SELECT regexp('60.054845,30.324694','^([1-9]\\d*\\.\\d*|0\\.\\d*[1-9]\\d*){1}\\,([1-9]\\d*\\.\\d*|0\\.\\d*[1-9]\\d*){1}$')

3、判断IP是否合法

正则解释:正则表达式 - 匹配 IPV4地址_AI算法攻城狮的博客-CSDN博客_正则表达式匹配ipv4

select '61.135.152.137' regexp '^((2(5[0-5]|[0-4]\\d))|[0-1]?\\d{1,2})(\\.((2(5[0-5]|[0-4]\\d))|[0-1]?\\d{1,2})){3}$';
select '2400:89c0:6000:2:643f:b740:28e3:df35' regexp '([a-zA-Z0-9]{1,4}(\\:[a-zA-Z0-9]{0,4}){1,7})';

三、从字符串中提取符合某个条件的子串(regexp_extract)

1、域名提取

select regexp_extract('https://www.baidu.com/a=1','https?://([-_a-z0-9\\.]+)');

2、中文提取

select regexp_extract('中文123','([\\u4E00-\\u9FFF]+)',1);

3、小数or整数提取

 select regexp_extract('4个2.0GHz','[0-9]+([.]{1}[0-9]+){0,1}',0);

4、邮箱提取

select regexp_extract('我的邮箱是1234@qq.com','([a-z0-9\_\.\-]+)@([\da-z\.\-]+)\.([a-z\.]{2,6})',0);   

5、URL去参数

select regexp_extract('http://tool.chinaz.com/regex','(.*)/$',1);
或
select CONCAT(parse_url(wap_url, 'PROTOCOL'),'://',parse_url(wap_url, 'HOST'),parse_url(wap_url, 'PATH'))

6、提取版本号

select regexp_extract('android 9.1.0','[0-9]+(.[0-9]+)*',0)

三、将匹配的子串替换(regexp_replace)

将匹配的子串替换为空,可以达到剔除的目标

1、剔除日期的间隔符

select regexp_replace('2019-03-11','-','');

2、剔除/

select regexp_replace('1/2','/','');

3、剔除\

select regexp_replace('1\2','/\\/','');

4、剔除\n \t \r

select regexp_replace('123\nabc','\\n|\\t|\\r','');

关于转义字符,hive需要用两个\,shell+hive需要使用四个\

需要转义的特殊字符请参考

https://xingqijiang.blog.csdn.net/article/details/114538383

  • 1
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

AI算法攻城狮

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值