2013-08-17 35 views
3

我試圖過濾用戶名中的所有ip地址。但這在我的查詢中確實無法正常工作:配置單元和正則表達式

select distinct regexp_extract(username, '^([0-9]{1,3})\.([0-9]{1,3})\.([0-9]{1,3})\.([0-9]{1,3})$', 0) from ips. 

問題是他甚至認爲數字爲1000000作爲IP地址。 任何想法如何解決它?

回答

3

您需要額外的反斜槓才能轉義特殊字符。或\ s。還有在https://cwiki.apache.org/confluence/display/Hive/LanguageManual+UDF

wiki上一些更多的信息

試着這麼做:

select 
    distinct regexp_extract(ip, '^([0-9]{1,3})\\.([0-9]{1,3})\\.([0-9]{1,3})\\.([0-9]{1,3})$', 0) as match 
from 
    ips 
having 
    match <> ""; 
+2

爲了不被pendantic,但不會這樣寫:'「^([0-9] {1,3} \ \。){3} [0-9] {1,3} $''會更短? –