Hive中正则表达式替换函数 regexp_replace和正则表达式解析函数 regexp_extract的用法总结

本文主要是介绍Hive中正则表达式替换函数 regexp_replace和正则表达式解析函数 regexp_extract的用法总结,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

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: 1 row(s)#执行语句2
hive> select regexp_replace('abcdefg','[^aceg]','x') as res;
#执行结果2
res
axcxexg
Time taken: 0.028 seconds, Fetched: 1 row(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;
#执行结果1
res
abcde
Time taken: 0.035 seconds, Fetched: 1 row(s)#执行语句2
hive> select regexp_extract('abcdefg','a(b)(.*?)(e)',1) as res;
#执行结果2
res
b
Time taken: 0.032 seconds, Fetched: 1 row(s)#执行语句3
hive> select regexp_extract('abcdefg','a(b)(.*?)(e)',2) as res;
#执行结果3
res
cd
Time taken: 0.028 seconds, Fetched: 1 row(s)#执行语句4
hive> select regexp_extract('abcdefg','a(b)(.*?)(e)',3) as res;
#执行结果4
res
e
Time taken: 0.028 seconds, Fetched: 1 row(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.hive.ql.metadata.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.apache.hadoop.hive.ql.udf.UDFRegExpExtract@571d0925 of 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.hive.ql.metadata.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.apache.hadoop.hive.ql.udf.UDFRegExpExtract@14201a90 of 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
resTime taken: 0.044 seconds, Fetched: 1 row(s)#2
hive> select regexp_extract('abcdefg','',0) as res;
OK
resTime taken: 0.031 seconds, Fetched: 1 row(s)#3
hive> select regexp_extract('abcdefg','a(bb)(.*?)(e)',0) as res;
OK
resTime taken: 0.029 seconds, Fetched: 1 row(s)

这篇关于Hive中正则表达式替换函数 regexp_replace和正则表达式解析函数 regexp_extract的用法总结的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/892921

相关文章

postgresql使用UUID函数的方法

《postgresql使用UUID函数的方法》本文给大家介绍postgresql使用UUID函数的方法,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友参考下吧... 目录PostgreSQL有两种生成uuid的方法。可以先通过sql查看是否已安装扩展函数,和可以安装的扩展函数

MySQL字符串常用函数详解

《MySQL字符串常用函数详解》本文给大家介绍MySQL字符串常用函数,本文结合实例代码给大家介绍的非常详细,对大家学习或工作具有一定的参考借鉴价值,需要的朋友参考下吧... 目录mysql字符串常用函数一、获取二、大小写转换三、拼接四、截取五、比较、反转、替换六、去空白、填充MySQL字符串常用函数一、

spring中的@MapperScan注解属性解析

《spring中的@MapperScan注解属性解析》@MapperScan是Spring集成MyBatis时自动扫描Mapper接口的注解,简化配置并支持多数据源,通过属性控制扫描路径和过滤条件,利... 目录一、核心功能与作用二、注解属性解析三、底层实现原理四、使用场景与最佳实践五、注意事项与常见问题六

C++中assign函数的使用

《C++中assign函数的使用》在C++标准模板库中,std::list等容器都提供了assign成员函数,它比操作符更灵活,支持多种初始化方式,下面就来介绍一下assign的用法,具有一定的参考价... 目录​1.assign的基本功能​​语法​2. 具体用法示例​​​(1) 填充n个相同值​​(2)

MySql基本查询之表的增删查改+聚合函数案例详解

《MySql基本查询之表的增删查改+聚合函数案例详解》本文详解SQL的CURD操作INSERT用于数据插入(单行/多行及冲突处理),SELECT实现数据检索(列选择、条件过滤、排序分页),UPDATE... 目录一、Create1.1 单行数据 + 全列插入1.2 多行数据 + 指定列插入1.3 插入否则更

PostgreSQL中rank()窗口函数实用指南与示例

《PostgreSQL中rank()窗口函数实用指南与示例》在数据分析和数据库管理中,经常需要对数据进行排名操作,PostgreSQL提供了强大的窗口函数rank(),可以方便地对结果集中的行进行排名... 目录一、rank()函数简介二、基础示例:部门内员工薪资排名示例数据排名查询三、高级应用示例1. 每

nginx -t、nginx -s stop 和 nginx -s reload 命令的详细解析(结合应用场景)

《nginx-t、nginx-sstop和nginx-sreload命令的详细解析(结合应用场景)》本文解析Nginx的-t、-sstop、-sreload命令,分别用于配置语法检... 以下是关于 nginx -t、nginx -s stop 和 nginx -s reload 命令的详细解析,结合实际应

MyBatis中$与#的区别解析

《MyBatis中$与#的区别解析》文章浏览阅读314次,点赞4次,收藏6次。MyBatis使用#{}作为参数占位符时,会创建预处理语句(PreparedStatement),并将参数值作为预处理语句... 目录一、介绍二、sql注入风险实例一、介绍#(井号):MyBATis使用#{}作为参数占位符时,会

全面掌握 SQL 中的 DATEDIFF函数及用法最佳实践

《全面掌握SQL中的DATEDIFF函数及用法最佳实践》本文解析DATEDIFF在不同数据库中的差异,强调其边界计算原理,探讨应用场景及陷阱,推荐根据需求选择TIMESTAMPDIFF或inte... 目录1. 核心概念:DATEDIFF 究竟在计算什么?2. 主流数据库中的 DATEDIFF 实现2.1

MySQL中的LENGTH()函数用法详解与实例分析

《MySQL中的LENGTH()函数用法详解与实例分析》MySQLLENGTH()函数用于计算字符串的字节长度,区别于CHAR_LENGTH()的字符长度,适用于多字节字符集(如UTF-8)的数据验证... 目录1. LENGTH()函数的基本语法2. LENGTH()函数的返回值2.1 示例1:计算字符串