Hive正则表达式

Hive版本:hive-3.1.2

一、Hive的正则表达式概述

        正则表达式是一种用于匹配和操作文本的强大工具,它是由一系列字符和特殊字符组成的模式,用于描述要匹配的文本模式。

      Hive的正则表达式灵活使用解决HQL开发过程中的很多问题,本篇文章主要对hive正则表达式的总结归纳。关系型数据库的正则表达式如下:

正则表达式 – 教程 | 菜鸟教程正则表达式 - 教程 正则表达式(Regular Expression)是一种文本模式,包括普通字符(例如,a 到 z 之间的字母)和特殊字符(称为“元字符”),可以用来描述和匹配字符串的特定模式。 正则表达式是一种用于模式匹配和搜索文本的工具。 正则表达式提供了一种灵活且强大的方式来查找、替换、验证和提取文本数据。 正则表达式可以应用于各种编程语言和文本处理工具中,如 JavaScript、Python、Java、Perl 等。 ..icon-default.png?t=N7T8https://www.runoob.com/regexp/regexp-tutorial.html     Hive支持如下正则表达式:

  • like
  • rlike
  • regexp
  • regexp_extract
  • regexp_replace

1.1 字符集合

字符描述
[a-z]字符范围。匹配指定范围内的任意字符。例如,'[a-z]' 可以匹配 'a' 到 'z' 范围内的任意小写字母字符
[A-Z]'[A-Z]' 可以匹配 'A' 到 'Z' 范围内的任意大写字母字符
[^a-z]匹配任何不在指定范围内的任意字符。例如,'[^a-z]' 可以匹配任何不在 'a' 到 'z' 范围内的任意字符
\d匹配一个数字字符,等价于[0-9],匹配所有的数字 
\D匹配一个非数字字符,等价于[^0-9]
\w匹配字母、数字、下划线。等价于'[A-Za-z0-9_]'
\W匹配非字母、数字、下划线。等价于 '[^A-Za-z0-9_]'
\s匹配任何空白字符,包括空格、制表符、换页符等等。等价于 [ \f\n\r\t\v]
\S匹配任何非空白字符。等价于 [^ \f\n\r\t\v]
\f匹配一个换页符。
\n匹配一个换行符。等价于 \x0a 和 \cJ
\r匹配一个回车符。等价于 \x0d 和 \cM

1.2 边界集合

字符描述
^每一行的开头,单行模式下等价于字符串的开头
$每一行的结尾,单行模式下等价于字符串的结尾

1.3 量词(重复次数)集合

字符描述
*匹配前面的子表达式零次或多次。例如,zo* 能匹配 "z" 以及 "zoo"。* 等价于{0,}
+匹配前面的子表达式一次或多次。例如,'zo+' 能匹配 "zo" 以及 "zoo",但不能匹配 "z"。+ 等价于 {1,}
?匹配前面的子表达式零次或一次。例如,"do(es)?" 可以匹配 "do" 或 "does" 。? 等价于 {0,1}
{n}n 是一个非负整数。匹配确定的 n 次。例如,'o{2}'能匹配 "food" 中的两个 o
{n,}n 是一个非负整数。至少匹配n 次。例如,'o{2,}' 能匹配 "foooood" 中的所有 o
{n,m}m 和n均为非负整数,其中n <= m。最少匹配 n 次且最多匹配 m 次。例如,"o{1,3}" 将匹配 "fooooood" 中的前三个 o

1.4  转义操作符

字符描述
\将下一个字符标记为一个特殊字符、或一个原义字符等。例如,'n' 匹配字符 "n"。'\n' 匹配一个换行符

1.5 运算符优先级

      正则表达式从左到右进行计算,并遵循优先级顺序。相同优先级的从左到右进行运算,不同优先级的运算先高后低。下表从最高到最低说明了各种正则表达式运算符的优先级顺序:

运算符描述示例
转义符\\ 是用于转义其他特殊字符的转义符号。它具有最高的优先级。\d 匹配数字,\. 匹配点号
圆括号() 圆括号()用于创建子表达式,具有高于其他运算符的优先级。(abc)+ 匹配 "abc" 一次或多次
量词
*, +, ?, {n}, {n,}, {n,m}
量词指定前面的元素可以重复的次数。a* 匹配零个或多个 "a"
定位点^, $^ 表示行的开头,$ 表示行的结尾
管道符号| | 表示"或"关系,用于在多个模式之间选择一个cat|dog 能够匹配到 "cat" 或 "dog"

   举例:\d{2,3}|[a-z]+(abc)* 的运算顺序
  • \d{2,3} 匹配两到三个数字
  • | 表示或
  • [a-z]+ 匹配一个或多个小写字母
  • (abc)* 匹配零个或多个 "abc"

二、Hive 正则表达式案例

2.1 like

  • 语法1: A like B    
  • 语法2: like(A, B)
  • 操作类型: strings
  • 返回类型:boolean或null
  • 描述:如果字符串A或者字符串B为null,则返回null;如果字符串A符合表达式B 的正则语法,则为true;否则为false。B中字符”_”表示任意单个字符,而字符”%”表示任意数量的字符
-- 举例:
select 'ahngnfg' like '%nfg'  --> true (%nfg也可以理解为以'nfg'结尾的字符)
select 'ahngnfg' like 'nfg%'  --> false(nfg%也可以理解为以'nfg'开头的字符)
select 'ahngnfg' like '%nfg%'  --> true (%nfg% 也可以理解为包含'nfg'的字符)

2.2 rlike

  • 语法1: A rlike B
  • 语法2: rlike (A, B)
  • 操作类型: strings
  • 返回类型: boolean或null
  • 描述: 如果字符串A或者字符串B为null,则返回null;如果字符串A符合JAVA正则表达式B的正则语法,则为true;否则为false。B中字符”_”表示任意单个字符,而字符”%”表示任意数量的字符
java正则:"." 任意单个字符
"*" 匹配前面的字符0次或多次
"+" 匹配前面的字符1次或多次
"?" 匹配前面的字符0次或1次
"\d" 匹配一个数字字符,等于[0-9],使用的时候写成'\\d'
"\D" 匹配一个非数字字符,等于[^0-9],使用的时候写成'\\D'
-- 举例:
select '2314' rlike '\\d+';  --> true
select 'numrqe' rlike '^num'; --> true

2.3 regexp

  • 语法1: A regexp B
  • 语法2: regexp (A, B)
  • 操作类型: strings
  • 返回类型: boolean或null
  • 描述: 功能与rlike相同

测试案例:

-- 匹配有5个连续数字的字符串
with tmp1 as
(
select '12325abc' as rn
union all
select 'b91256ab56' as rn
union all
select 'bfs89abc21' as rn
)
select rnfrom tmp1where rn regexp '\\d{5}';

-- 匹配开头有3个及以上连续数字的字符
with tmp1 as
(
select '12325abc' as rn
union all
select '91fe56' as rn
union all
select 'bfs89abc21' as rn
)
select rnfrom tmp1where rn regexp '^\\d{3}';

-- 匹配开头只有3个连续数字的字符
with tmp1 as
(
select '12325abc' as rn
union all
select '912fe56' as rn
union all
select 'bfs89abc21' as rn
)
select rnfrom tmp1where rn regexp '^\\d{3}\\D';

2.4 regexp_replace正则替换

  • 语法: regexp_replace(string A, string B, string C)
  • 操作类型: strings
  • 返回值: string
  • 说明: 将字符串A中的符合java正则表达式B的部分替换为C。
-- 举例:
select regexp_replace('h234ney', '\\d+', 'fd'); --> hfdney

2.5 regexp_extract正则提取

  • 语法: regexp_extract(string A, string pattern, int index)
  • 返回值: string
  • 说明: 将字符串A按照pattern正则表达式的规则拆分,返回index指定的字符,index从1开始计
--举例:
select regexp_extract('honeymoon', 'hon(.*?)(oon)', 0); --> honeymoon
select regexp_extract('honeymoon', 'hon(.*?)(oon)', 1); --> eym
select regexp_extract('honeymoon', 'hon(.*?)(oon)', 2); --> oon

参考文章:

HIVE正则(like、rlike、regexp、regexp_replace、regexp_extract)_hive 正则化-CSDN博客

大数据开发之Hive篇12-Hive正则表达式_hive 正则-CSDN博客

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://xiahunao.cn/news/2779782.html

如若内容造成侵权/违法违规/事实不符,请联系瞎胡闹网进行投诉反馈,一经查实,立即删除!

相关文章

MATLAB知识点: intersect、union、setdiff和setxor函数 交集、并集、差集和对称差集

​讲解视频&#xff1a;可以在bilibili搜索《MATLAB教程新手入门篇——数学建模清风主讲》。​ MATLAB教程新手入门篇&#xff08;数学建模清风主讲&#xff0c;适合零基础同学观看&#xff09;_哔哩哔哩_bilibili 节选自第3章 3.4.5 集合运算 intersect、union、setdiff和se…

mysql、mybatis中SORT

SORT排序 根据数据表sys_series中HOT&#xff08;int类型&#xff09;进行升序排列&#xff1a; 原来的数据库中存储&#xff1a; 排序 # 结果是HOT字段为null的所有数据都排在最前面&#xff0c;不为null的数据按升序排列 SELECT * FROM sys_series ORDER BY HOT;# 结果是H…

Python远程控制工具的使用

本节我们对所编写的远程控制工具的功能进行测试。首先开启主控端程序&#xff0c; 如下所示&#xff1a; 接下来打开被控端程序。当被控端打开时&#xff0c;主控端会收到被控端的连接请 求。 开启被控端程序&#xff1a; 主控端接收到连接请求并显示被控端主机的信息&#xff…

【教3妹学编程-算法题】使数组异或和等于 K 的最少操作次数

3妹&#xff1a;2哥&#xff0c;新年好鸭~ 2哥 : 新年好&#xff0c;3妹这么早啊 3妹&#xff1a;是啊&#xff0c;新年第一天要起早&#xff0c;这样就可以起早一整年 2哥 :得&#xff0c;我还不了解你&#xff0c;每天晒到日上三竿 3妹&#xff1a;嘿嘿嘿嘿&#xff0c;一年是…

linux 08 文件查找

02. 第一. alias 第二. locate&#xff1a; locate 找不到最近的文件 更新locate 后

mac电脑上使用android studio创建flutter项目

mac电脑环境配置可以看这篇文章&#xff1a;https://xiaoshen.blog.csdn.net/article/details/136068650 配置玩环境之后&#xff0c;开始创建第一个flutter项目&#xff1a;点击new flutter project或者new project都可以 然后选择flutter&#xff1a; 并将sdk配置为解压后的…

【后端开发】互联网后台开发,通用必备技术栈(设计与工具)

文章目录 1、功能设计1.1 系统设计1.2 数据设计 2、非功能设计2.1 稳定性设计2.2 可测试性设计2.3 应用安全、异常处理、扩展性、兼容性 3、开发技术栈与工具3.1 编程语言与框架3.2 集成开发环境与工具3.3 数据库与数据存储3.4 中间件与分布式3.5 操作系统与应用部署 【后端开发…

静态时序分析:建立时间分析

静态时序分析https://blog.csdn.net/weixin_45791458/category_12567571.html?spm1001.2014.3001.5482 在静态时序分析中&#xff0c;建立时间检查约束了触发器时钟引脚&#xff08;时钟路径&#xff09;和输入数据引脚&#xff08;数据路径&#xff09;之间的时序关系&#x…

【PTA|期末复习|编程题】数组相关编程题(一)

目录 7-1 乘法口诀数列 (20分) 输入格式&#xff1a; 输出格式&#xff1a; 输入样例&#xff1a; 输出样例&#xff1a; 样例解释&#xff1a; 代码 7-2 矩阵列平移(20分) 输入格式&#xff1a; 输出格式&#xff1a; 输入样例&#xff1a; 输出样例&#xff1a; …

【十五】【C++】list的简单实现

list 的迭代器解引用探究 /*list的迭代器解引用探究*/ #if 1 #include <list> #include <vector> #include <iostream> #include <algorithm> using namespace std;class Date {private:int _year;int _month;int _day;public:Date(): _year(2024), _m…

C++11:移动构造函数【写法+调用时机】【C++返回vector为什么不报错】

文章目录 what is 移动构造函数&#xff1f;移动构造函数的实现的例子when 移动构造函数&#xff1f;在C98之前&#xff0c;没有移动构造函数&#xff0c;是怎么做的呢&#xff1f;后记 what is 移动构造函数&#xff1f; 构造函数string(string&& str)类似于复制构造…

多旋翼无人机飞行控制详解,四旋翼无人机飞控原理深入解析

在四旋翼无人机中&#xff0c;相邻的两个螺旋桨旋转方向是相反的。如图所示&#xff0c;三角形红箭头表示飞机的机头朝向&#xff0c;螺旋桨M1、M3的旋转方向为逆时针&#xff0c;螺旋桨M2、M4的旋转方向为顺时针。当飞行时&#xff0c;M2、M4所产生的逆时针反作用力&#xff0…

黄金交易策略(Nerve Nnife.mql4):大K线对技术指标的影响

我们使用heiken ashi smoothed来做敏感指标&#xff08;大趋势借助其转向趋势预判&#xff0c;但不是马上转变&#xff09;&#xff0c;has默认使用6根k线的移动平均值来做计算的。若在6根k线规范内有一个突变的行情&#xff08;k线很长&#xff09;&#xff0c;那么整个行情的…

物联网和工业4.0

在当今这个快速发展的技术时代&#xff0c;物联网&#xff08;IoT&#xff09;和工业4.0成为了推动全球进入新工业时代的两大驱动力。对于刚入行的人来说&#xff0c;深入理解这两个概念及其背后的技术原理&#xff0c;对于把握未来的职业机会至关重要。 物联网&#xff0c;简…

【EAI 016】VIMA: General Robot Manipulation with Multimodal Prompts

论文标题&#xff1a;VIMA: General Robot Manipulation with Multimodal Prompts 论文作者&#xff1a;Yunfan Jiang, Agrim Gupta, Zichen Zhang, Guanzhi Wang, Yongqiang Dou, Yanjun Chen, Li Fei-Fei, Anima Anandkumar, Yuke Zhu, Linxi Fan 作者单位&#xff1a;Stanfo…

Netty应用(七) 之 Handler Netty服务端编程总结

目录 15.Handler 15.1 handler的分类 15.1.1 按照方向划分 15.1.2 handler的结构 15.2 输入方向ChannelInboundHandlerAdapter 15.2.1 输出方向Handler的顺序 15.2.2 多个输入方向Handler之间的数据传递 15.2.2.1 handler消失了 15.2.2.2 手动编写netty提供的new Strin…

opencv mat用法赋值克隆的操作和一些基本属性

//Mat基本结构 (头部 数据部分) //赋值的话 就是修改了指针位置 但还是指向了原来数据 并没创建数据 本质上并没有变 //只有克隆或者拷贝时 它才会真正复制一份数据 //代码实现 //创建方法 - 克隆 //Mat m1 src.clone(); //复制 //Mat m2; //src.copyTo(m2); //赋值法 …

【Linux】学习-基础IO—上

Linux基础IO—上 复习c语言接口 你真的懂文件吗&#xff1f; 文件的打开与关闭 深入了解文件读与写(C语言级别) 系统文件I/O 我们知道&#xff0c;文件是放在磁盘(硬件)上的&#xff0c;我们用代码访问文件的思路是&#xff1a; 写代码 -> 编译 -> 生成可执行exe …

shell脚本编译与解析

文章目录 shell环境变量全局变量局部变量设置PATH 环境变量 启动文件环境变量持久化 脚本编写重定向判断 和循环命令行参数传入参数循环读取命令行参数获取用户输入 处理选项处理简单选项处理带值选项 重定向显示并且同时输出到文件 替换目录下的所有文件中某个关键字删除关键字…

服务器内存使用率多少会影响正常访问?

在探讨服务器内存使用率多少会影响正常访问这个问题时&#xff0c;我们首先要明白&#xff0c;服务器的性能和稳定性与内存使用状况息息相关。当服务器的内存使用率过高时&#xff0c;可能会导致系统运行缓慢、程序崩溃或者出现其他一些异常情况&#xff0c;从而影响到正常的网…