Hive中正则表达式替换函数regexp_replace和正则表达式解析函数regexp_。。
。
Hive中正则表达式替换函数 regexp_replace和正则表达式解析函数 regexp_extract的⽤法总结
Hive中有很多字符串相关的函数,其中有两个与正则表达式相关的⽐较特殊,近期使⽤的时候做了较多的测试,做个笔记,⿎励⼀下⾃⼰,每天进步⼀点点。
正则表达式替换函数 regexp_replace
正则替换是常⽤的字符串替换函数
1. 语法:regexp_replace(string subject, string pattern, string str)
2. 参数说明:subject为被替换的字符串,pattern为正则表达式,str为替换正则表达式(匹配到的字符串)的字符串
3. 描述:将字符串subject中,符合正则表达式pattern的字符串,替换为字符串str,然后将替换后的整个字符串返回
4. 测试:
#执⾏语句1
hive>select regexp_replace('abcdefg','abc','ABA')as res;
#执⾏结果1
res
ABAdefg
Time taken: 0.041 seconds, Fetched: 1row(s)
#执⾏语句2
hive>select regexp_replace('abcdefg','[^aceg]','x')as res;
#执⾏结果2
res
axcxexg
Time taken: 0.028 seconds, Fetched: 1row(s)
正则表达式解析函数 regexp_extract
先了解正则中捕获分组的概念,其实就是⼀个括号内的内容,如 “(\d)\d” ⽽"(\d)" 这就是⼀个捕获分组
1. 语法:regexp_extract(string subject, string pattern, int index)
2. 参数说明:subject为被解析的字符串,pattern为正则表达式,index为正则表达式中捕获分组的序号,取值范围是0~n(n为捕获分组
个数)。
其中,index取值为 0:返回pattern匹配到的整个结果;
index取值为1:返回pattern中第1个捕获分组匹配到的结果;
…
index取值为n:返回pattern中第n个捕获分组匹配到的结果;
index取值⼩于0或者⼤于n:报错。
3. 描述:将字符串subject,按照pattern正则表达式的规则拆分,返回index指定的字符。
4. 测试:
#执⾏语句1
hive>select regexp_extract('abcdefg','a(b)(.*?)(e)',0)as res;regex匹配
#执⾏结果1
res
abcde
Time taken: 0.035 seconds, Fetched: 1row(s)
#执⾏语句2
hive>select regexp_extract('abcdefg','a(b)(.*?)(e)',1)as res;
#执⾏结果2
res
b
Time taken: 0.032 seconds, Fetched: 1row(s)
#执⾏语句3
hive>select regexp_extract('abcdefg','a(b)(.*?)(e)',2)as res;
#执⾏结果3
res
cd
Time taken: 0.028 seconds, Fetched: 1row(s)
#执⾏语句4
hive>select regexp_extract('abcdefg','a(b)(.*?)(e)',3)as res;
#执⾏结果4
res
e
Time taken: 0.028 seconds, Fetched: 1row(s)
#执⾏语句5
hive>select regexp_extract('abcdefg','a(b)(.*?)(e)',4)as res;
#执⾏结果5
FAILED: SemanticException [Error 10014]: Line 1:7 Wrong arguments '4': org.apache.hadoop.adata.HiveException: Unable to execute method public java.lang.String org.apache.hadoop.hive.ql.udf.UDFRegExpExtract.evaluate(java.lang.String,java.lang.String,java.lang.Integer)on
object org.apach e.hadoop.hive.ql.udf.UDFRegExpExtract@571d0925of class org.apache.hadoop.hive.ql.udf.UDFRegExpExtract with arguments {abcdefg:java.lang.String, a(b)(.*?)(e):java.lang.String,4:java.lang.Integer} of size 3
#执⾏语句6
hive>select regexp_extract('abcdefg','a(b)(.*?)(e)',-1)as res;
#执⾏结果6
FAILED: SemanticException [Error 10014]: Line 1:7 Wrong arguments '1': org.apache.hadoop.adata.HiveException: Unable to execute method public java.lang.String org.apache.hadoop.hive.ql.udf.UDFRegExpExtract.evaluate(java.lang.String,java.lang.String,java.lang.Integer)on object org.apach e.hadoop.hive.ql.udf.UDFRegExpExtract@14201a90of class org.apache.hadoop.hive.ql.udf.UDFRegExpExtract with arguments {abcdefg:java.lang.String, a(b)(.*?)(e):java.lang.String,-1:java.lang.Integer} of size 3
5.补充说明:如果 subject为空,或者pattern为空,或者pattern匹配不到字符串,则返回值为空
#1
hive>select regexp_extract('','ab',1)as res;
OK
res
Time taken: 0.044 seconds, Fetched: 1row(s)
#2
hive>select regexp_extract('abcdefg','',0)as res;
OK
res
Time taken: 0.031 seconds, Fetched: 1row(s)
#3
hive>select regexp_extract('abcdefg','a(bb)(.*?)(e)',0)as res; OK
res
Time taken: 0.029 seconds, Fetched: 1row(s)
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论