(06)Hive——正则表达式

news2024/11/29 22:32:43

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 rn
  from tmp1
 where 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 rn
  from tmp1
 where 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 rn
  from tmp1
 where 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://www.coloradmin.cn/o/1449991.html

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

相关文章

vue3 之 倒计时函数封装

理解需求 编写一个函数useCountDown可以把秒数格式化为倒计时的显示xx分钟xx秒 1️⃣formatTime为显示的倒计时时间 2️⃣start是倒计时启动函数&#xff0c;调用时可以设置初始值并且开始倒计时 实现思路分析 安装插件 dayjs npm i dayjs倒计时逻辑函数封装 // 封装倒计时…

第24讲投票管理实现

投票管理实现 后端&#xff1a; package com.java1234.controller;import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.java1234.entity.*; import com.java1234.service.…

【PyQt】12-滑块、计数控件

文章目录 前言一、滑块控件 QSlider运行结果 二、计数器控件 QSpinBox运行结果 总结 前言 1、滑块控件 2、计数控件 一、滑块控件 QSlider #Author &#xff1a;susocool #Creattime:2024/2/15 #FileName:28-滑块控件 #Description: 通过滑块选择字体大小 import sys from PyQ…

DevOps落地笔记-21|业务价值:软件发布的最终目的

上一课时介绍如何度量软件的内部质量和外部质量。在外部质量中&#xff0c;我们提到用户满意度是衡量软件外部质量的关键因素。“敏捷宣言”的第一条原则规定&#xff1a;“我们最重要的目标&#xff0c;是通过持续不断的及早交付有价值的软件使用户满意”。从这一点也可以看出…

【C/C++内存管理详解】

C/C内存管理详解 1. C/C内存分布2. C语言中动态内存管理方式3. C中动态内存管理3.1 new/delete操作内置类型**3.2 new和delete操作自定义类型** 4. operator new与operator delete函数4.1 operator new与operator delete函数 5. new和delete的实现原理5.1 内置类型5.2 自定义类…

【开源】在线办公系统 JAVA+Vue.js+SpringBoot+MySQL

目录 1 功能模块1.1 员工管理模块1.2 邮件管理模块1.3 人事档案模块1.4 公告管理模块 2 系统展示3 核心代码3.1 查询用户3.2 导入用户3.3 新增公告 4 免责声明 本文项目编号&#xff1a; T 001 。 \color{red}{本文项目编号&#xff1a;T001。} 本文项目编号&#xff1a;T001。…

《合成孔径雷达成像算法与实现》Figure6.17

% rho_r = c/(2*Fr)而不是rho_r = c/(2*Bw) % Hsrcf exp函数里忘记乘pi了 clc clear close all参数设置 距离向参数设置 R_eta_c = 20e3; % 景中心斜距 Tr = 2.5e-6; % 发射脉冲时宽 Kr = 20e12; % 距离向调频率 alpha_os_r = 1.2;…

生活中有很多压力,怎么办?

在这篇文章的最开始&#xff0c;我想跟你一起做一个思维实验&#xff1a; 假如现在有一个按钮&#xff0c;按下去之后&#xff0c;你会过上一段新的生活。这段生活的走向跟你原本生活的走向大体一样&#xff0c;不同之处在于&#xff1a;它会消除你未来生活中的一切压力。你将不…

如何应对“刺耳”的“啸叫”声

在笔记本电脑、平板电脑、智能手机、电视机以及车载电子设备等运行时&#xff0c;有时会听到"叽"的噪音。该现象称为"啸叫"&#xff0c;导致该现象出现的原因可能在于电容器、电感器等无源元件。电容器与电感器的发生啸叫的原理不同&#xff0c;尤其是电感…

121.乐理基础-五线谱-五线谱的临时变音记号规则

内容参考于&#xff1a;三分钟音乐社 上一个内容&#xff1a;五线谱的多声部与指法问题 前置内容&#xff1a;还原号、临时变音记号在简谱中的规则 变音记号三个规则&#xff1a; 例子1&#xff1a;下方乐谱中午任意变音记号&#xff0c;所以就遵循第三个规则&#xff0c;它…

立体库库存数量统计(SCL代码)

立体库库存物体检测由光电开关完成&#xff0c;每个储物格都有一个检测光电。5*6的仓库需要30个光电检测开关组成检测矩阵。找出矩阵中的最大元素并返回其所在的行号和列号和我们今天介绍的算法有很多相似的地方&#xff0c;大家可以对比学习。具体链接地址如下&#xff1a; h…

python小项目----多重剪切板

代码&#xff1a; import shelve,pyperclip,sysimport mcbmcbShelfshelve.open(mcb)# 保存剪切板内容 if len(sys.argv)3 and sys.argv[1].lower()save:#剪切板的内容保存到第三个参数中mcbShelf[sys.argv[2]]pyperclip.paste()print("你的剪切板中的内容将被保存到mcbSh…

蓝桥杯嵌入式学习记录——PWM输出

目录 一、PWM原理介绍 二、学习目的 三、cubeMX的配置 四、PWM输出代码 一、PWM原理介绍 PWM&#xff08;Pulse Width Modulation&#xff0c;脉宽调制&#xff09;是一种通过改变信号的脉冲宽度来控制电平的技术。它通过调整脉冲信号的占空比&#xff08;高电平时间与周期…

鲁南制药“健康幸福中国年”主题航班,开启探寻健康与幸福的旅程

“小年&#xff0c;小年&#xff0c;过了今天就是年。”提到过年&#xff0c;北方人的“过年”是从腊月二十三的“小年”开始的&#xff0c;而南方地区是在明天。虽然时间不同&#xff0c;但是浓浓的年味是一样的&#xff0c;红彤彤是主色调&#xff0c;喜洋洋是主乐曲&#xf…

计算机设计大赛 深度学习YOLOv5车辆颜色识别检测 - python opencv

文章目录 1 前言2 实现效果3 CNN卷积神经网络4 Yolov56 数据集处理及模型训练5 最后 1 前言 &#x1f525; 优质竞赛项目系列&#xff0c;今天要分享的是 &#x1f6a9; **基于深度学习YOLOv5车辆颜色识别检测 ** 该项目较为新颖&#xff0c;适合作为竞赛课题方向&#xff0…

力扣刷题之旅:高阶篇(五)—— 网络流算法:最大流与最小割

力扣&#xff08;LeetCode&#xff09;是一个在线编程平台&#xff0c;主要用于帮助程序员提升算法和数据结构方面的能力。以下是一些力扣上的入门题目&#xff0c;以及它们的解题代码。 目录 引言 一、最大流与最小割的基本概念 二、力扣上的题目 题目描述&#xff1a;“最大…

linux(阿里云)安装pytorch

目录 环境 安装步骤 1 检查python3和pip3是否已经安装 2 安装pytorch 3 安装完毕&#xff0c;检查pytorch版本 环境 阿里云 ubuntu 22.04 UEFI版 64位 安装步骤 1 检查python3和pip3是否已经安装 输入下面两条指令&#xff1a; python3 --version pip --version 检…

计算机的历史以及原理

一、计算机发展历史 计算机的历史可以追溯到几个世纪前,但现代计算机的起源和发展主要经历了以下几个重要阶段: 1. 机械计算设备:早在17世纪,人们就开始尝试制造可以进行基本数学运算的设备。例如,法国哲学家兼数学家Blaise Pascal在1642年发明了Pascalene,这是一种用于…

windows vs 自己编译源码 leveldb 然后使用自己编译的文件

1 准备源码文件 1.1 第一种方法 git下载源码 vs项目中git leveldb源码和git third_party googletest-CSDN博客 1.2 第二种方法 手动下载 然后把第三方的源码下载 复制到 third_party 对应的文件夹中 没有文件夹 third_party -> powershell mkdir third_party 2 编译lev…

Linux内核-时间子系统(时钟中断)专题汇总

文章目录 概要一、专题汇总1.1、优秀系列博文1.2、时间子系统1.3、高精度定时器hrtimer1.4、RTC硬件芯片驱动 概要 中断机制是计算机系统的重要组成部分&#xff0c;在Linux中也不例外&#xff0c;中断按照来源分为硬中断和软中断&#xff0c;而硬中断根据硬件范围分为外中断和…