IP地址的RegEx,没有范围限制

时间:2018-09-04 13:43:52

标签: regex ip-address

我正在寻找一个正则表达式,该正则表达式可以找到无范围限制(即0-999)的IP地址。这比普通的IP地址正则表达式“简单”,但是我正在学习正则表达式,并且对如何从本质上结束正则表达式感到困惑,并且不匹配IP地址前后不超过4个句点或字符。

这就是我所拥有的:"/\b(\d{1,3}\.){3}(\d{1,3})\b/"

因此,使用此正则表达式,它将找到大多数IP地址,但是当存在这样的IP地址时将失败:

1.2.3.4.5

感谢帮助。不管哪种口味或正则表达式都没关系,只需要知道如何与上面的情况不匹配即可。

2 个答案:

答案 0 :(得分:2)

您可以使用lookarounds将上下文限制在预期的匹配范围内:

\b(?<!\d\.)(?:\d{1,3}\.){3}\d{1,3}\b(?!\.\d)
  ^^^^^^^^^                         ^^^^^^^^

请参见regex demo

在这里

  • (?<!\d\.)是一个负向后看,如果当前位置左侧紧靠数字+ .
  • ,则匹配失败
  • (?!\.\d)是一个否定的超前查询,如果当前位置右侧紧邻. +一个数字,则匹配失败。

还要确保1到3位数字的八位字节匹配,您可以添加更多限制:

\b(?<!\d\.|\d)(?:\d{1,3}\.){3}\d{1,3}\b(?!\.?\d)
  ^^^^^^^^^^^^                         ^^^^^^^^^

请参见another regex demo

在这里,(?<!\d\.|\d)也会在当前位置的前面紧跟着一个数字时失败,并且当预期的匹配之后在前面没有一个点的数字时,超前也会失败。

答案 1 :(得分:0)

您也可以使用这个。

^ [0-9] {1,3}。[0-9] {1,3}。[0-9] {1,3}。[0-9] {1,3} $