IP地址正则表达式允许端口

时间:2013-03-24 11:11:51

标签: java regex ip port

我有以下正则表达式匹配IP地址:

(([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])$

有人可以更新它以允许端口号(端口号是可选的)

提前致谢

2 个答案:

答案 0 :(得分: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是向未来的读者提示我们正在谈论一个虚线四边形和一个端口。

答案 1 :(得分: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}$