轉:http://superlxw1234.iteye.com/blog/1751216
需求:
從字符串"979|7.10.80|8684"中提取最后一個豎線|后面的內容,
但是在這個字符串中,豎線的個數不是固定的 。
使用hive中的regexp_extract函數實現如下:
- select regexp_extract('979|7.10.80|8684','.*\\|(.*)',1) from t1 limit 1;
- OK
- 8864
由於正則表達式的貪婪匹配,一直會匹配到最后一個豎線。
如果要取第一個豎線前面的內容,實現如下:
- select regexp_extract('979|7.10.80|8684','(.*?)\\|.*',1) from t1 limit 1;
- OK
- 979
貪婪匹配和非貪婪匹配的區別 .* 和 .*?
如果可以確定取以豎線分割的第N字段,用split即可,比如,取第二個字段7.10.80:
- select split('979|7.10.80|8684','\\|')[1] from t1 limit 1;
- OK
- 7.10.80