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



我正在尝试使用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);
}

最新更新