hive正则匹配:regexp_replace、regexp_extract、regexp

hive正则匹配:regexp_replace、regexp_extract、regexp

一、regexp语法介绍

regexp

语法: A REGEXP B

操作类型: strings

描述: 功能与RLIKE相同

regexp_extract

语法: regexp_extract(string subject, string pattern, int index)

返回值: string

说明:将字符串subject按照pattern正则表达式的规则拆分,返回index指定的字符。

regexp_replace

语法: regexp_replace(string A, string B, string C)

返回值: string

说明:将字符串A中的符合java正则表达式B的部分替换为C。注意有些情况下要使用转义字符。

select regexp_replace('hell0 w0rld!', '\\d+', 'o') as rp_re
       ,regexp_extract('dsc"hello world!"dvg', '"(.*?)"', 1) as rp_et
       ,'dsc"hello world!"dvg' regexp '"(.*?)"' as rp

结果:
rp_re            rp_et            rp
hello world!	hello world!	true

注:hive的正则表达式在进行通配符匹配的时候\d,\w,\s,这种需要进行二次转换,即先转移后正则的形式:(\S+)-->(\\S+)

转义: \\

  • ^ 表示开头
  • $ 表示结尾
  • . 表示任意字符
  • * 表示任意多个

二、正则引入

注释 

  • $ 匹配输入字符串结尾的位置。如果设置了 RegExp 对象的 Multiline 属性,那么 $ 还匹配 \n 或 \r 前面的位置。若要匹配 $ 字符本身,请使用 \$。
  • ( ) 标记子表达式的开始和结束。可以捕获子表达式以供以后使用。若要匹配这两个字符,请使用 \\( 和 \\)。
  • * 零次或多次匹配前面的字符或子表达式。若要匹配 * 字符,请使用 \*。
  • + 一次或多次匹配前面的字符或子表达式。若要匹配 + 字符,请使用 \+。
  • . 匹配除换行符 \n 之外的任何单个字符。若要匹配 .,请使用 \。 [ ] 标记中括号表达式的开始。若要匹配这些字符,请使用 \[ 和 \]。
  • ? 零次或一次匹配前面的字符或子表达式,或指示“非贪心”限定符。若要匹配 ? 字符,请使用 \?。
  • \ 将下一字符标记为特殊字符、文本、反向引用或八进制转义符。例如,字符 n 匹配字符 n。\n 匹配换行符。序列 \\ 匹配 \,序列 \( 匹配 (。
  • / 表示文本正则表达式的开始或结束。若要匹配 / 字符,请使用 \/。
  • ^ 匹配输入字符串开始处的位置,但在中括号表达式中使用的情况除外,在那种情况下它对字符集求反。若要匹配 ^ 字符本身,请使用 \^。
  • { } 标记限定符表达式的开始。若要匹配这些字符,请使用 \{ 和 \}。
  • | 指出在两个项之间进行选择。若要匹配 | ,请使用 \| 

三、使用技巧

.

[ ]

^

$

四个字符是所有语言都支持的正则表达式,所以这个四个是基础的正则表达式。正则难理解因为里面有一个等价的概念,这个概念大大增加了理解难度,让很多初学者看起来会懵,如果把等价都恢复成原始写法,自己书写正则就超级简单了,就像说话一样去写你的正则了&

  • 9
    点赞
  • 67
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值