簡體   English   中英

使用java.util.regex.Pattern在java中查找類似的IP

[英]find similar IP in java using java.util.regex.Pattern

我試圖在java中使用java.util.regex.Pattern找到類似的IP。

String ipAddr = "192.168.112.33";
Pattern PRIVATE_ADDRESS_PATTERN = Pattern.compile("192.168.(.*?).33", Pattern.CASE_INSENSITIVE);
String IPaddress = PRIVATE_ADDRESS_PATTERN.matcher(ipAddr).toString(); 

它不適合我。 我的錯誤在哪里?

為什么你根本不做:

String ipAddr = "192.168.112.33";

//If your pattern match with your String then it is correct else it is not
if (ipAddr.matches("192\\.168\\.(.*?)\\.33")) {
    System.out.println("CORRECT");
} else {
    System.out.println("NOT CORRECT");
}

就像@lathspell在評論中說的那樣,你必須用\\\\.來逃避點(。) \\\\.

更正確的匹配器如下:

Pattern IP_PATTERN = Pattern.compile("192\\.168\\.(\\d{1,3})\\.33");

這樣,你只會匹配那里的數字,而不是字母。 根據更多用例,您可能需要優化數字匹配器以確保它僅在0-255范圍內匹配:

String IP_PATTERN_PART = "(?:25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9][0-9]|[0-9]?)";
Pattern IP_PATTERN = Pattern.compile("192\\.168\\.("+IP_PATTERN_PART+")\\.33");

此外,如果您確定除了IP之外永遠不會得到任何其他內容(意味着沒有封閉文本),您可能需要使用開始和結束分隔符:

Pattern IP_PATTERN = Pattern.compile("^192\\.168\\.(\\d{1,3})\\.33$");

然后,一旦你決定使用哪種模式,你就必須這樣使用它:

Matcher matcher = IP_PATTERN.matcher(candidate);
String otherIP = null;
if (matcher.matches()) {
  matcher.find();
  otherIP = matcher.group(1);
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM