2013-03-28 150 views
1

我已經四處搜索,但還沒有找到任何有效的工具。如何檢查文本是否包含IP地址?我曾經試過,但它不工作:如何檢查文本是否包含IP地址?

public boolean ip(String a_text) { 
    String ip_filter = "\\d{1,3}\\.\\d{1,3}\\.\\d{1,3}\\.\\d{1,3}"; 
    if (a_text.toLowerCase().contains(ip_filter.toLowerCase())){ 
     return true; 
    } 
    return false; 
} 
+0

你應該使用'匹配()',而不是'包含() '。 –

+0

http://stackoverflow.com/questions/4581877/validating-ipv4-string-in-java – evgenyl

+0

@AndrewLogvinov,重要的是要說,如果OP使用匹配比正則表達式需要匹配整個字符串。就像它已經開始/並錨定在模式上一樣。 –

回答

12

你試圖使用Regular Expressioncontains方法。並且該方法不會收到一個正則表達式作爲參數。它接收一個純String。您應該嘗試使用PatternMatcher

下面是一個例子:

public static boolean ip(String text) { 
    Pattern p = Pattern.compile("^(?:(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\\.){3}(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)$"); 
    Matcher m = p.matcher(text); 
    return m.find(); 
} 

EDIT:我的圖案更新爲更適當的一個,實測here

+0

它工作得很好!謝謝! – HydroTekZ

1

是的,我在過去使用的使用匹配,和一個更好的正則表達式是:

((0|1[0-9]{0,2}|2[0-9]?|2[0-4][0-9]|25[0-5]|[3-9][0-9]?)\.){3}(0|1[0-9]{0,2}|2[0-9]?|2[0-4][0-9]|25[0-5]|[3-9][0-9]?) 

RegExLib

0

你可以做很多事用正則表達式。但你爲什麼要!?你已經有好並經過測試的庫,例如Guava

boolean isValid = InetAddresses.isInetAddress("1.2.3.4"); 

Appache Validator

isValidInet4Address(String) 

等等(見this後)