我有以下的正则表达式匹配的IP地址: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])$
可能有人请更新它允许对端的端口号(端口号是可选)
在此先感谢
我有以下的正则表达式匹配的IP地址: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-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}$
人,这是一个烂摊子。最好简化搜索模式,然后验证值,而不是试图在正则表达式中做所有事情。例如,
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,但是更好的正则表达式是:“([012]?\ d {1,2})(\\。[012]?\\ d {1,2}){3} d {1,5}))?” – 2013-03-24 16:43:48
感谢布雷克,我决定使用你的,我不得不做一个小小的改变,使端口可选 (([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 - [O- 9] {2} | 2 [0-4] [0-9] | 25 [0-5])(?:[\ d] {1,5})$ – 2013-03-27 17:38:36
正则表达式*需要*端口。 – Richard 2013-03-24 11:40:27