Hive正則表達(dá)式

參考維基百科Hadoop Hive概念學(xué)習(xí)系列之hive的正則表達(dá)式初步(六)Hive 正則匹配函數(shù)

之前沒(méi)有在意過(guò)正則表達(dá)式,但是工作組不可避免的遇到了,感覺(jué)也比較重要,就花點(diǎn)時(shí)間理解一下。

一、正則表達(dá)式簡(jiǎn)介

正則表達(dá)式的目的:對(duì)字符串str進(jìn)行解析,用正則表達(dá)式(pattern)進(jìn)行匹配,并得到我們想要的符合模板pattern的字符串

一個(gè)正則表達(dá)式通常被稱(chēng)為一個(gè)模式(pattern),為用來(lái)描述或者匹配一系列匹配某個(gè)句法規(guī)則的字符串。例如:Handel、H?ndel和Haendel這三個(gè)字符串,都可以由H(a|?|ae)ndel這個(gè)模式來(lái)描述。

同一個(gè)正則表達(dá)式可以匹配多個(gè)字符串。
例如,goo+gle可以匹配google、gooogle、goooogle等
0*42可以匹配42、042、0042、00042等。

反過(guò)來(lái)說(shuō),對(duì)于google、gooogle、goooogle我們都可以用正則表達(dá)式“goo+gle”匹配得到。而google、gooogle、goooogle就算我們想要的符合模板pattern的字符串。

二、hive正則表達(dá)式匹配函數(shù)

舉兩個(gè)經(jīng)常用到的:regexp_extract 與 regexp_replace

2.1、regexp_extract函數(shù)

regexp_extract(str, regexp[, idx]) 字符串正則表達(dá)式解析函數(shù)。

extracts a group that matches regexp

參數(shù)解釋?zhuān)?/p>

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

  • regexp 是正則表達(dá)式

  • idx是返回結(jié)果 取表達(dá)式的哪一部分 默認(rèn)值為1。

其中還有幾個(gè)符號(hào)與idx需要注意的地方。
小括號(hào)( )標(biāo)記一個(gè)子表達(dá)式的開(kāi)始與結(jié)束的位置
**1表示返回正則表達(dá)式中第一個(gè)() 對(duì)應(yīng)的結(jié)果 **。
2表示返回正則表達(dá)式中第二個(gè)() 對(duì)應(yīng)的結(jié)果

0表示把整個(gè)正則表達(dá)式對(duì)應(yīng)的結(jié)果全部返回

舉例:

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)

返回第一個(gè)()對(duì)應(yīng)的結(jié)果。

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)

此時(shí),第一個(gè)()中對(duì)應(yīng)結(jié)果是love,所以返回“l(fā)ove”。

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)

因?yàn)閕dx是0,所以返回整個(gè)正則表達(dá)式匹配的結(jié)果。

2.1、regexp_replace函數(shù)

語(yǔ)法: regexp_replace(string A, string B, string C)
返回值: string
說(shuō)明:將字符串A中的符合Java正則表達(dá)式B的部分替換為C。

注意,在有些情況下要使用轉(zhuǎn)義字符,類(lèi)似Oracle中的regexp_replace函數(shù)。

舉例說(shuō)明:

把A中符合正則表達(dá)式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中符合正則表達(dá)式B的部分(這里為You)替換為C(這里為字符串“l(fā)inlin”)

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

Total jobs = 1

...

OK

Ilovelinlin
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容