hive中巧用正則表達式的貪婪匹配


轉:http://superlxw1234.iteye.com/blog/1751216

需求:

從字符串"979|7.10.80|8684"中提取最后一個豎線|后面的內容,
但是在這個字符串中,豎線的個數不是固定的 

使用hive中的regexp_extract函數實現如下:

Sql代碼    收藏代碼
  1. select regexp_extract('979|7.10.80|8684','.*\\|(.*)',1) from t1 limit 1;    
  2. OK    
  3. 8864  

由於正則表達式的貪婪匹配,一直會匹配到最后一個豎線。

如果要取第一個豎線前面的內容,實現如下:

Sql代碼    收藏代碼
  1. select regexp_extract('979|7.10.80|8684','(.*?)\\|.*',1) from t1 limit 1;    
  2. OK    
  3. 979   

貪婪匹配和非貪婪匹配的區別 .* 和 .*?

 

如果可以確定取以豎線分割的第N字段,用split即可,比如,取第二個字段7.10.80:

 

Sql代碼    收藏代碼
  1. select split('979|7.10.80|8684','\\|')[1] from t1 limit 1;    
  2. OK    
  3. 7.10.80   

 


免責聲明!

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



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