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

Java 允许端口的IP地址正则表达式,java,regex,ip,port,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])$ 是否有人可以更新它以允许端口号(端口号是可选的) 提前谢谢你,伙计,真是一团糟。最好简化搜索模式,然后验证值,而不是尝试在正则表达式中执行所有操作。e、 g (([0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5

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


提前谢谢你,伙计,真是一团糟。最好简化搜索模式,然后验证值,而不是尝试在正则表达式中执行所有操作。e、 g

(([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;
}
私有字符串findIP(字符串输入){
Matcher m=Pattern.compile((\\d+\\){3}\\d+:(\\d+).Matcher(in);
if(m.find()){
字符串[]p=m.group(1).split(“\\”);
对于(int i=0;i<4;i++)
if(Integer.parseInt(p[i])>255)返回null;
if(Integer.parseInt(m.group(3))>65535)返回null;
返回m.group(0);
}
返回null;
}

我可能没有把所有的事情都考虑进去(地址从0开始,parseInt返回负数,等等),但是使用一个更简单的正则表达式可以提高可读性,并且使用数字4、255和65535可以向未来的读者暗示,我们说的是虚线四元组和端口。

正则表达式需要端口。+1,但一个更好的正则表达式是:([[012][012]或[[012][012][012][012][012][012]或[1,2}{{1,2}(:([d{1,1,5{1,2,5{1,5})是一个更好的regex是::::([012[012[012[012[012[012[012]12 12[012[012[012]12[12[012]12[012]12[012]][012]或1,1,1,1,1,1,2{{{{{{)2})3})3})3}{{{{{{3}{{{{3{{3{3{3{{{3})3{3{3{3{3{3})3}4][0-9]| 25[0-5])(:[\d]{1,5})$