Hive正则表达式

参考维基百科Hadoop Hive概念学习系列之hive的正则表达式初步(六)Hive 正则匹配函数

之前没有在意过正则表达式,但是工作组不可避免的遇到了,感觉也比较重要,就花点时间理解一下。

一、正则表达式简介

正则表达式的目的:对字符串str进行解析,用正则表达式(pattern)进行匹配,并得到我们想要的符合模板pattern的字符串

一个正则表达式通常被称为一个模式(pattern),为用来描述或者匹配一系列匹配某个句法规则的字符串。例如:Handel、Händel和Haendel这三个字符串,都可以由H(a|ä|ae)ndel这个模式来描述。

同一个正则表达式可以匹配多个字符串。
例如,goo+gle可以匹配google、gooogle、goooogle等
0*42可以匹配42、042、0042、00042等。

反过来说,对于google、gooogle、goooogle我们都可以用正则表达式“goo+gle”匹配得到。而google、gooogle、goooogle就算我们想要的符合模板pattern的字符串。

二、hive正则表达式匹配函数

举两个经常用到的:regexp_extract 与 regexp_replace

2.1、regexp_extract函数

regexp_extract(str, regexp[, idx]) 字符串正则表达式解析函数。

extracts a group that matches regexp

参数解释:

  • str是被解析的字符串或字段名

  • regexp 是正则表达式

  • idx是返回结果 取表达式的哪一部分 默认值为1。

其中还有几个符号与idx需要注意的地方。
小括号( )标记一个子表达式的开始与结束的位置
**1表示返回正则表达式中第一个() 对应的结果 **。
2表示返回正则表达式中第二个() 对应的结果

0表示把整个正则表达式对应的结果全部返回

举例:

hive> select regexp_extract('IloveYou','(I)(.*?)(You)',1) from test1 limit 1;

Total jobs = 1

...

OK

I

Time taken: 26.057 seconds, Fetched: 1 row(s)

返回第一个()对应的结果。

hive> select regexp_extract('IloveYou','I(.*?)(You)',1) from test1 limit 1;

Total jobs = 1

...

Total MapReduce CPU Time Spent: 7 seconds 340 msec

OK

love

Time taken: 28.067 seconds, Fetched: 1 row(s)

此时,第一个()中对应结果是love,所以返回“love”。

hive> select regexp_extract('IloveYou','(I)(.*?)(You)',0) from test1 limit 1;

Total jobs = 1

...

OK

IloveYou

Time taken: 28.06 seconds, Fetched: 1 row(s)

因为idx是0,所以返回整个正则表达式匹配的结果。

2.1、regexp_replace函数

语法: regexp_replace(string A, string B, string C)
返回值: string
说明:将字符串A中的符合Java正则表达式B的部分替换为C

注意,在有些情况下要使用转义字符,类似Oracle中的regexp_replace函数。

举例说明:

把A中符合正则表达式B的部分(这里为You)替换为C(这里为空字符串“”)

hive> select regexp_replace("IloveYou","You","") from test1 limit 1;

Total jobs = 1

...

OK

Ilove

Time taken: 26.063 seconds, Fetched: 1 row(s)

把A中符合正则表达式B的部分(这里为You)替换为C(这里为字符串“linlin”)

hive> select regexp_replace("IloveYou","You","lili") from test1 limit 1;

Total jobs = 1

...

OK

Ilovelinlin

推荐阅读更多精彩内容

  • 前言 昨日技术交流群里有人提了个问题,问题是这样子的:把一个由子母和数字组成的字符串,提取所有的字母串和数字串。简...
    风筝flying阅读 19,591评论 0 1
  • 自从年前得空写了两篇文章之后就开始忙了,这一忙就是2个月😭。当时信誓旦旦说的定期写篇博客的计划也就泡汤了🤣,不过好...
    景科同学阅读 804评论 0 9
  • 正则表达式(Regular Expression)是一种文本模式,包括普通字符(例如,a 到 z 之间的字母)和特...
    anglia熊阅读 1,679评论 0 0
  • JS正则表达式一条龙讲解,从原理和语法到JS正则、ES6正则扩展,最后再到正则实践思路 Stinson 关注 20...
    小杰的简书阅读 180评论 0 1
  • 推荐几个正则表达式编辑器 Debuggex :https://www.debuggex.com/ PyRegex:...
    杨梦鸽阅读 8,841评论 10 150