我有以下正则表达式匹配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])$
有人可以更新它以允许端口号(端口号是可选的)
提前致谢
答案 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}$