Hive 正則匹配函數 regexp_extract


1。regexp_extract

語法:    regexp_extract(string subject,  string pattern,  int index)

返回值: string

說明:  將字符串subject按照pattern正則表達式的規則拆分,返回index指定的字符。

第一參數:   要處理的字段

第二參數:    需要匹配的正則表達式

第三個參數:

  • 0是顯示與之匹配的整個字符串
  • 1 是顯示第一個括號里面的
  • 2 是顯示第二個括號里面的字段...

 

注意,在有些情況下要使用轉義字符(雙斜杠了‘\\’)。

舉例:

select 
regexp_extract('x=a3&x=18abc&x=2&y=3&x=4','x=([0-9]+)([a-z]+)',0),  -- x=18abc
regexp_extract('x=a3&x=18abc&x=2&y=3&x=4','^x=([a-z]+)([0-9]+)',0), -- x=a3

regexp_extract('https://detail.tmall.com/item.htm?spm=608.7065813.ne.1.Ni3rsN&id=522228774076&tracelog=fromnonactive','id=([0-9]+)',0),    -- id=522228774076
regexp_extract('https://detail.tmall.com/item.htm?spm=608.7065813.ne.1.Ni3rsN&id=522228774076&tracelog=fromnonactive','id=([0-9]+)',1),    -- 522228774076

regexp_extract('http://a.m.taobao.com/i41915173660.htm','i([0-9]+)',0),            -- i41915173660
regexp_extract('http://a.m.taobao.com/i41915173660.htm','i([0-9]+)',1)             -- 41915173660

from test.dual;

 

正則匹配字符解釋:

  • ^ 表示開頭
  • $ 表示結尾
  • . 表示任意字符
  • * 表示任意多個

2。手機號清洗:

 regexp_replace(mobile,'[^0-9]','')    regexp '1[0-9]{10}'  返回true,則為好的手機號。

 

3。其他兩個函數split 和 parse_url

也可以做簡單的url 關鍵字提取, 如下

select 
   'xinli.ewt360.com/Psychology/Search?keyword=abc?語文數學123' url,
   split(split(lower('xinli.ewt360.com/Psychology/Search?keyword=abc?語文數學123/from'),'keyword=')[1],'/')[0]                              split1,  -- 結果: abc?語文數學123
   split(parse_url(concat('http://',lower('xinli.ewt360.com/Psychology/Search?keyword=abc?語文數學123/from')), 'QUERY','keyword'),'/')[0] parse_url1,
   
   regexp_extract(lower('xinli.ewt360.com/Psychology/Search?keyword=abc?語文數學123'),'keyword=(.+)',1),           -- 還未找到辦法
   regexp_extract(lower('xinli.ewt360.com/Psychology/Search?keyword=語文數學'),'keyword=(^[\\u4e00-\\u9fa5]$)+')   -- 中文匹配,還未驗證

 

4.  https://blog.csdn.net/lsr40/article/details/82223923  

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM