日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

大数据之Hive:正则表达式

發布時間:2024/3/12 编程问答 41 豆豆
生活随笔 收集整理的這篇文章主要介紹了 大数据之Hive:正则表达式 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

目錄

  • 背景
  • 一、正則的通配符簡介
    • 1、正則表達式的符號及意義
    • 2、字符簇:
    • 3、各種操作符的運算優先級:
  • 二、regexp函數
  • 三、regexp_extract函數
  • 四、regexp_replace函數

背景

最近在工作中,遇到一些匹配,需要使用正則表達式,發現自己在這一塊知識有所欠缺,故總結一下;

一、正則的通配符簡介

1、正則表達式的符號及意義

符號含義實列
/做為轉意,即通常在"/"后面的字符不按原來意義解釋如" * “匹配它前面元字符0次或多次,/a*/將匹配a,aa,aaa,加了”/"后,/a/* /將只匹配"a* "
^匹配一個輸入或一行的開頭/^a/匹配"an A",而不匹配"An a"
$匹配一個輸入或一行的結尾/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匹配一個字數字符//d/ = /[0-9]/
/D匹配一個非字數字符//D/ = /[^0-9]/
/s匹配一個空白字符,包括/n,/r,/f,/t,/v等
/S匹配一個非空白字符,等于/[^/n/f/r/t/v]/
/w匹配一個可以組成單詞的字符(alphanumeric,這是我的意譯,含數字),包括下劃線,如[/w]匹配"$5.98"中的5,等于[a-zA-Z0-9]
/W匹配一個不可以組成單詞的字符,如[/W]匹配"$5.98"中的 $,等于[^a-zA-Z0-9]

備注:
‘( )’ 標記一個子表達式的開始和結束位置。
‘[]’ 標記一個中括號表達式。
/num 匹配 num,其中 num 是一個正整數。對所獲取的匹配的引用。

2、字符簇:

[[:alpha:]] 任何字母。
[[:digit:]] 任何數字。
[[:alnum:]] 任何字母和數字。
[[:space:]] 任何白字符。
[[:upper:]] 任何大寫字母。
[[:lower:]] 任何小寫字母。
[[:punct:]] 任何標點符號。
[[:xdigit:]] 任何16進制的數字,相當于[0-9a-fA-F]

3、各種操作符的運算優先級:

轉義符>圓括號和方括號>限定符>位置和順序
具體如下:
/ 轉義符
(), ( ?: ), (?=), [] 圓括號和方括號
*, +, ?, {n}, {n,}, {n,m} 限定符
^, $, anymetacharacter 位置和順序
正則表達式的符號及意義

二、regexp函數

語法: A REGEXP B
操作類型: strings
描述: 功能與RLIKE相同

hive> select id,name,birthday,tea_list from stu_info where birthday regexp '\\d{8}'; id name birthday tea_list 01 zhangsan 20000308 東邪|西毒|南帝|北丐 02 lisi 20040418 東邪|西毒|南帝 03 wangwu 20011008 西毒|南帝 hive> select id,name,birthday,tea_list from stu_info where tea_list regexp '東邪|北丐'; id name birthday tea_list 01 zhangsan 20000308 東邪|西毒|南帝|北丐 02 lisi 20040418 東邪|西毒|南帝 hive> select id,name,birthday,tea_list from stu_info where birthday not rlike '\\d{8}'; id name birthday tea_list 05 tianqi 1994-10-01 西毒|南帝

補充:like (模糊匹配)與rlike的 區別
示例:

hive>select id,name,birthday,tea_list from stu_info where tea_list like '%東邪%'; id name birthday tea_list 01 zhangsan 20000308 東邪|西毒|南帝|北丐 02 lisi 20040418 東邪|西毒|南帝 hive> select id,name,birthday,tea_list from stu_info where birthday not rlike '\\d{8}'; id name birthday tea_list 05 tianqi 1994-10-01 西毒|南帝

首先需要明確的是like的內容不是正則,而是通配符。
而rlike的內容可以是正則,正則的寫法與java一樣。需要轉義,例如’\m’需要使用’\m’
1,%:表示任意0個或多個字符。可匹配任意類型和長度的字符,有些情況下若是中文,請使用兩個百分號(%%)表示

SELECT name FROM stu_info WHERE name LIKE '%三%';

2,_: 表示任意單個字符。匹配單個任意字符,它常用來限制表達式的字符長度語句;

SELECT name FROM stu_info WHERE name LIKE '_三_'; SELECT name FROM stu_info WHERE name LIKE '三_';

3,[ ]:表示括號內所列字符中的一個(類似正則表達式)。指定一個字符、字符串或范圍,要求所匹配對象為它們中的任一個。

SELECT name FROM stu_info WHERE name LIKE '[張李王]三';

4,[ ^ ] :表示不在括號所列之內的單個字符。其取值和 [] 相同,但它要求所匹配對象為指定字符以外的任一個字符。

SELECT name FROM stu_info WHERE name LIKE '[^張李王]三';

三、regexp_extract函數

語法: regexp_extract(string subject, string pattern, int index)
返回值: string
說明:將字符串subject按照pattern正則表達式的規則拆分,返回index指定的字符
idx是返回結果 取表達式的哪一部分 默認值為1。
0表示把整個正則表達式對應的結果全部返回
1表示返回正則表達式中第一個() 對應的結果 以此類推。

hive> select regexp_extract('IloveYou','I(.*?)(You)',1) from test1 limit 1; love hive> select regexp_extract('IloveYou','I(.*?)(You)',2) from test1 limit 1; You hive> select regexp_extract('IloveYou','(I)(.*?)(You)',1) from test1 limit 1; I hive> select regexp_extract('IloveYou','(I)(.*?)(You)',0) from test1 limit 1; IloveYou hive>select regexp_extract(create_time,'[0-9]{3}[1-9]-(0[1-9]|1[012])-[0-9]{2}',0) from time_table_1; 2021-08-14 2021-08-15 2021-08-16

四、regexp_replace函數

語法: regexp_replace(string A, string B, string C)
返回值: string
說明:將字符串A中的符合java正則表達式B的部分替換為C。注意,在有些情況下要使用轉義字符,類似oracle中的regexp_replace函數。

hive> select regexp_replace("IloveYou","You","") from test1 limit 1; Ilove hive> select regexp_replace("IloveYou","You","lili") from test1 limit 1; Ilovelili hive>select date_format (regexp_replace('2017/05/21','/','-'),'yyyy-MM-dd') data_dt; 2017-05-21

參考:https://blog.csdn.net/bitcarmanlee/article/details/51106726

總結

以上是生活随笔為你收集整理的大数据之Hive:正则表达式的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。