使用正则表达式从字符串中提取 IP 地址

2022-09-02 11:11:45

在应用程序中,我得到的字符串包含IP地址,但这些字符串没有精确的格式。我们所知道的是,这些字符串可能包含IP地址。

下面是字符串的外观示例:

  • “XPSPort”
  • “IP_10.29.167.187”
  • "10.29.166.193"

我想得到一个Java代码,如果有的话,可以提取字符串的ip地址,如果字符串不包含ip地址,则返回“”。

我尝试了这段代码,但它不起作用:

String IPADDRESS_PATTERN = 
        "^([01]?\\d\\d?|2[0-4]\\d|25[0-5])\\." +
        "([01]?\\d\\d?|2[0-4]\\d|25[0-5])\\." +
        "([01]?\\d\\d?|2[0-4]\\d|25[0-5])\\." +
        "([01]?\\d\\d?|2[0-4]\\d|25[0-5])$";

Pattern pattern = Pattern.compile(IPADDRESS_PATTERN);
Matcher matcher = pattern.matcher(ipString);
        if (matcher.find()) {
            return matcher.group();
        }
        else{
            return "0.0.0.0";
        }

我很确定使用RegExp是实现这一目标的最佳方法,但我对这些不是很擅长,所以有人可以帮我找到好的RegExp吗?

提前致谢。


答案 1

理查德的链接帮助我找到了答案。这是工作代码:

String IPADDRESS_PATTERN = 
        "(?:(?: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]?)";

Pattern pattern = Pattern.compile(IPADDRESS_PATTERN);
Matcher matcher = pattern.matcher(ipString);
if (matcher.find()) {
    return matcher.group();
} else{
    return "0.0.0.0";
}

答案 2

IPV4_PATTERN = "^(25[0-5]|2[0-4]\\d|[0-1]?\\d?\\d)(\\.(25[0-5]|2[0-4]\\d|[0-1]?\\d?\\d)){3}$"