【问题标题】:RegEx for IP Address with no range limitIP 地址的正则表达式,没有范围限制
【发布时间】:2018-09-04 13:43:52
【问题描述】:

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

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

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

1.2.3.4.5

感谢您的帮助。而且不管是什么风味或正则表达式都没有关系,只需要知道如何不匹配上面的大小写即可。

【问题讨论】:

  • 使用环视,"/\b(?<!\d\.)(\d{1,3}\.){3}(\d{1,3})\b(?!\.\d)/"

标签: regex ip-address


【解决方案1】:

您可以使用lookarounds 来限制预期匹配的上下文:

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

regex demo

这里,

  • (?&lt;!\d\.) 是一个否定的lookbehind,如果在当前位置的左边有一个数字+.,则匹配失败
  • (?!\.\d) 是一个否定的前瞻,如果在当前位置的右侧有一个 . + 一个数字,则匹配失败。

为了同时确保 1 到 3 位的八位字节匹配,您可以添加更多限制:

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

another regex demo

这里,(?&lt;!\d\.|\d) 如果在当前位置前面有一个数字也会失败,如果在预期匹配之后前面有一个没有点的数字,则前瞻也会失败。

【讨论】:

    【解决方案2】:

    你也可以用这个。

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

    【讨论】:

    • 这可以安全地作为评论。
    猜你喜欢
    • 2012-12-23
    • 2011-05-26
    • 1970-01-01
    • 2013-01-08
    • 2020-10-14
    • 2011-06-20
    相关资源
    最近更新 更多