hive 轉義字符的使用,以及regexp_extract用法

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;

正則常見匹配

簡述:

表達式 .* 的意思很好理解,就是單個字符匹配任意次,即貪婪匹配。
表達式 .*? 是滿足條件的情況只匹配一次,即懶惰匹配

示例

表達式 .* 的意思很好理解,就是單個字符匹配任意次,即貪婪匹配。 正則表達式(.?)惰性匹配
1、. 匹配任意除換行符“\n”外的字符;
2、表示匹配前一個字符0次或無限次;
3、+或
後跟?表示非貪婪匹配,即儘可能少的匹配,如
?重複任意次,但儘可能少重複;
4、 .? 表示匹配任意數量的重複,但是在能使整個匹配成功的前提下使用最少的重複。
如:a.
?b匹配最短的,以a開始,以b結束的字符串。如果把它應用於aabab的話,它會匹配aab和ab。

常見應用

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

參考鏈接:https://www.cnblogs.com/skyEva/p/5175377.html

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章