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 匹配换行符。序列 \\ 匹配 \,序列 \( 匹配 (。
- / 表示文本正则表达式的开始或结束。若要匹配 / 字符,请使用 \/。
- ^ 匹配输入字符串开始处的位置,但在中括号表达式中使用的情况除外,在那种情况下它对字符集求反。若要匹配 ^ 字符本身,请使用 \^。
- { } 标记限定符表达式的开始。若要匹配这些字符,请使用 \{ 和 \}。
- | 指出在两个项之间进行选择。若要匹配 | ,请使用 \|
三、使用技巧
. |
[ ] |
^ |
$ |
四个字符是所有语言都支持的正则表达式,所以这个四个是基础的正则表达式。正则难理解因为里面有一个等价的概念,这个概念大大增加了理解难度,让很多初学者看起来会懵,如果把等价都恢复成原始写法,自己书写正则就超级简单了,就像说话一样去写你的正则了&