Regex 用于网络、IP、范围、子网、Cidr的正则表达式

Regex 用于网络、IP、范围、子网、Cidr的正则表达式,regex,networking,Regex,Networking,给定这样一个输入,56.1.2.3 56.1.2.4 255.255.255.254 56.1.2.7-9 56.5.1.1至56.5.1.7,我需要一个正则表达式,它可以挑出括号中的内容[56.1.2.3][56.1.2.4 255.255.255.254][56.1.2.7-9][56.5.1.1至56.5.1.7] 以下是我所拥有的: private static final String IP_Address = "\\d{1,3}\\.\\d{1,3}\\.\\d{1,3}\\

给定这样一个输入,56.1.2.3 56.1.2.4 255.255.255.254 56.1.2.7-9 56.5.1.1至56.5.1.7,我需要一个正则表达式,它可以挑出括号中的内容[56.1.2.3][56.1.2.4 255.255.255.254][56.1.2.7-9][56.5.1.1至56.5.1.7]

以下是我所拥有的:

    private static final String IP_Address = "\\d{1,3}\\.\\d{1,3}\\.\\d{1,3}\\.\\d{1,3}\\d";//56.1.2.3
private static final String IP_WithMask = "(\\d{1,3}.){3}(\\d{1,3})(?:\\s+[255])(\\d{1,3}.){3}(\\d{1,3})"; //56.1.2.3 255.255.255.254
private static final String IP_CIDR = "(\\d{1,3}.){3}(\\d{1,3})(?:\\s*/)(\\d{1,3})"; //56.1.2.3/24 
private static final String IP_ADDRESS_Dash_Numeric_RANGE = "((\\d{1,3}.){3}(\\d{1,3})(?:\\s*-)(\\d{1,3}))";// 56.1.2.3-4
private static final String IP_ADDRESS_Dash_ADDRESS_RANGE = "((\\d{1,3}.){3}(\\d{1,3})(?:\\s*-\\s*)(\\d{1,3}.){3}(\\d{1,3}))";//56.1.2.3-56.1.2.5
private static final String IP_ADDRESS_To_Numeric_RANGE = "(\\d{1,3}.){3}(\\d{1,3})(?:\\s*[T|t][O|o]\\s*)(\\d{1,3})";//56.1.2.3 to 255
private static final String IP_ADDRESS_To_ADDRESS_RANGE = "((\\d{1,3}.){3}(\\d{1,3})(?:\\s*[T|t][O|o]\\s*)(\\d{1,3}.){3}(\\d{1,3}))";//56.1.2.3 to 56.1.3.5`

问题是,我的正则表达式无法区分单个IP和IP后跟掩码56.1.2.3 255.x.x.x的情况。其他类型也存在同样的问题

我测试了下面的正则表达式,适用于您的所有情况。 请参阅格式化正则表达式中的注释。 破译结果的方法是测试第3-6组的IP类型。 所有组件都被捕获,甚至段开始

正则表达式:

 (\d{1,3}(?:\.\d{1,3}){2}\.(\d{1,3}))(?:(?:-|\s+to\s+)(\d{1,3}(?![\d\.]))|(?:-|\s*to\s+)(\d{1,3}(?:\.\d{1,3}){3})|\s+(25\d(?:\.\d{1,3}){3})|\s*/(\d{1,3}))?
格式:


我的朋友,这是一个漂亮的正则表达式。谢谢,希望你能用它做点什么。嘿,伙计,你在这个问题上做得很好。希望得到你对这件事的意见。。。
 (                             # (1), IP
      \d{1,3} 
      (?: \. \d{1,3} ){2}
      \.
      ( \d{1,3} )                   # (2), From segment
 )
 (?:
      (?: - | \s+ to \s+ )
      (                             # (3), Dash/To segment
           \d{1,3} 
           (?! [\d\.] )
      )
   |  
      (?: - | \s* to \s+ )
      (                             # (4), Dash/To range
           \d{1,3} 
           (?: \. \d{1,3} ){3}
      )
   |  
      \s+     
      (                             # (5), Mask
           25 \d 
           (?: \. \d{1,3} ){3}
      )
   |  
      \s* /     
      (                             # (6), Port
           \d{1,3} 
      )
 )?