大数据之Hive:正则表达式
目錄
- 背景
- 一、正則的通配符簡介
- 1、正則表達式的符號及意義
- 2、字符簇:
- 3、各種操作符的運算優(yōu)先級:
- 二、regexp函數(shù)
- 三、regexp_extract函數(shù)
- 四、regexp_replace函數(shù)
背景
最近在工作中,遇到一些匹配,需要使用正則表達式,發(fā)現(xiàn)自己在這一塊知識有所欠缺,故總結(jié)一下;
一、正則的通配符簡介
1、正則表達式的符號及意義
| / | 做為轉(zhuǎn)意,即通常在"/"后面的字符不按原來意義解釋 | 如" * “匹配它前面元字符0次或多次,/a*/將匹配a,aa,aaa,加了”/"后,/a/* /將只匹配"a* " |
| ^ | 匹配一個輸入或一行的開頭 | /^a/匹配"an A",而不匹配"An a" |
| $ | 匹配一個輸入或一行的結(jié)尾 | /a$/匹配"An a",而不匹配"an A" |
| * | 匹配前面元字符0次或多次 | /ba*/將匹配b,ba,baa,baaa |
| + | 匹配前面元字符1次或多次 | /ba+/將匹配ba,baa,baaa |
| ? | 匹配前面元字符0次或1次 | /ba?/將匹配b,ba |
| (x) | 匹配x保存x在名為$1…$9的變量中 | |
| x豎y | 匹配x或y | |
| {n} | 精確匹配n次 | |
| {n,} | 匹配n次以上 | |
| {n,m} | 匹配n-m次 | |
| [xyz] | 字符集(character set),匹配這個集合中的任一一個字符(或元字符) | |
| [^xyz] | 不匹配這個集合中的任何一個字符 | |
| /d | 匹配一個字數(shù)字符 | //d/ = /[0-9]/ |
| /D | 匹配一個非字數(shù)字符 | //D/ = /[^0-9]/ |
| /s | 匹配一個空白字符,包括/n,/r,/f,/t,/v等 | |
| /S | 匹配一個非空白字符,等于/[^/n/f/r/t/v]/ | |
| /w | 匹配一個可以組成單詞的字符(alphanumeric,這是我的意譯,含數(shù)字),包括下劃線,如[/w]匹配"$5.98"中的5,等于[a-zA-Z0-9] | |
| /W | 匹配一個不可以組成單詞的字符,如[/W]匹配"$5.98"中的 $,等于[^a-zA-Z0-9] |
備注:
‘( )’ 標記一個子表達式的開始和結(jié)束位置。
‘[]’ 標記一個中括號表達式。
/num 匹配 num,其中 num 是一個正整數(shù)。對所獲取的匹配的引用。
2、字符簇:
[[:alpha:]] 任何字母。
[[:digit:]] 任何數(shù)字。
[[:alnum:]] 任何字母和數(shù)字。
[[:space:]] 任何白字符。
[[:upper:]] 任何大寫字母。
[[:lower:]] 任何小寫字母。
[[:punct:]] 任何標點符號。
[[:xdigit:]] 任何16進制的數(shù)字,相當于[0-9a-fA-F]
3、各種操作符的運算優(yōu)先級:
轉(zhuǎn)義符>圓括號和方括號>限定符>位置和順序
具體如下:
/ 轉(zhuǎn)義符
(), ( ?: ), (?=), [] 圓括號和方括號
*, +, ?, {n}, {n,}, {n,m} 限定符
^, $, anymetacharacter 位置和順序
正則表達式的符號及意義
二、regexp函數(shù)
語法: A REGEXP B
操作類型: strings
描述: 功能與RLIKE相同
補充:like (模糊匹配)與rlike的 區(qū)別
示例:
首先需要明確的是like的內(nèi)容不是正則,而是通配符。
而rlike的內(nèi)容可以是正則,正則的寫法與java一樣。需要轉(zhuǎn)義,例如’\m’需要使用’\m’
1,%:表示任意0個或多個字符。可匹配任意類型和長度的字符,有些情況下若是中文,請使用兩個百分號(%%)表示
2,_: 表示任意單個字符。匹配單個任意字符,它常用來限制表達式的字符長度語句;
SELECT name FROM stu_info WHERE name LIKE '_三_'; SELECT name FROM stu_info WHERE name LIKE '三_';3,[ ]:表示括號內(nèi)所列字符中的一個(類似正則表達式)。指定一個字符、字符串或范圍,要求所匹配對象為它們中的任一個。
SELECT name FROM stu_info WHERE name LIKE '[張李王]三';4,[ ^ ] :表示不在括號所列之內(nèi)的單個字符。其取值和 [] 相同,但它要求所匹配對象為指定字符以外的任一個字符。
SELECT name FROM stu_info WHERE name LIKE '[^張李王]三';三、regexp_extract函數(shù)
語法: regexp_extract(string subject, string pattern, int index)
返回值: string
說明:將字符串subject按照pattern正則表達式的規(guī)則拆分,返回index指定的字符
idx是返回結(jié)果 取表達式的哪一部分 默認值為1。
0表示把整個正則表達式對應(yīng)的結(jié)果全部返回
1表示返回正則表達式中第一個() 對應(yīng)的結(jié)果 以此類推。
四、regexp_replace函數(shù)
語法: regexp_replace(string A, string B, string C)
返回值: string
說明:將字符串A中的符合java正則表達式B的部分替換為C。注意,在有些情況下要使用轉(zhuǎn)義字符,類似oracle中的regexp_replace函數(shù)。
參考:https://blog.csdn.net/bitcarmanlee/article/details/51106726
總結(jié)
以上是生活随笔為你收集整理的大数据之Hive:正则表达式的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: do...while循环语句、死循环、循
- 下一篇: 【Audio音频兴趣拓展】音频功放的输入