-3

I have the following regex to match an IP address:

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

Could someone please update it to allow for a port number on the end (port number would be optional)

Thanks in advance

4

2 回答 2

1

伙计,那是一团糟。最好简化搜索模式,然后验证值,而不是尝试在正则表达式中做所有事情。例如,

private String findIP(String in) {
  Matcher m = Pattern.compile("((\\d+\\.){3}\\d+):(\\d+)").matcher(in);
  if (m.find()) {
    String[] p = m.group(1).split("\\.");
    for (int i = 0; i < 4; i++)
      if (Integer.parseInt(p[i]) > 255) return null;
    if (Integer.parseInt(m.group(3)) > 65535) return null;
    return m.group(0);
  }
  return null;
}

我可能没有考虑到所有内容(地址以 0. 开头,parseInt 返回负数等),但是使用更简单的正则表达式可以提高可读性,并且将数字 4、255 和 65535 作为提示未来的读者,我们正在谈论一个虚线四边形和一个端口。

于 2013-03-24T15:51:17.740 回答
0
(([0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])\.){3}([0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5]):[\d]{1,5}$
于 2013-03-24T11:29:33.287 回答