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