正则表达式查找除 IP 地址以外的所有 IP 地址以 172 开头

Posted

技术标签:

【中文标题】正则表达式查找除 IP 地址以外的所有 IP 地址以 172 开头【英文标题】:Regex for find All ip address except IP address starts with 172 【发布时间】:2017-01-24 06:40:57 【问题描述】:

我希望正则表达式找到不以 172.0.0.0 开头的 IP 地址。

我写了一些正则表达式^\d1,3\.\d1,3\.\d1,3\.\d1,3$,它可以找到所有的IP地址。

【问题讨论】:

Unable to match IP regex in javascript的可能重复 【参考方案1】:

. 在正则表达式中是匹配所有内容的字符。要在这种情况下使用它,您必须对其进行转义。

也将其限制为仅以 172 开头的 IP 地址,只需将其硬编码到您的正则表达式中,如下所示:

^172\.\d1,3\.\d1,3.\d1,3$

Debuggex Demo

然后您可以使用它来过滤掉任何已经进行的匹配。


或者,如果您不是从 IP 地址列表开始,您可以使用否定的前瞻来立即获取它们。

^(?!172)\d1,3\.\d1,3\.\d1,3.\d1,3$

Debuggex Demo


请注意,这可能会匹配多个 IP 地址 - 例如 400.660.226.602 会被捕获 - 即使真实 IP4 地址不包含高于 255 的数字。也许这不会影响您的用例 - 但要记住这一点。


根据下面的 cmets,如果您在文档中的任何位置而不是在他们自己的行中搜索 IP 地址,请使用 \b 而不是 ^$

\b(?!172)\d1,3\.\d1,3\.\d1,3.\d1,3\b

Debuggex Demo

这将匹配日志格式,例如,在消息中包含一个 IP 地址,而不是在它自己的行上。

[10:01:22] 来自10.14.242.211 的连接已建立。

【讨论】:

+1 以获得很好的解释 - 尽管在野外使用地址时要小心,在这种情况下我建议使用单词边界。 您能否详细说明您所说的单词边界是什么意思?在问题的正则表达式中,以及我的答案^$ 中的建议使用... 对。因此,您将使用边界来确保 172 地址(被部分捕获)不会被捕获为 72 地址?如果您按照实际示例同时使用 ^$ 字符,则不会发生这种情况 - 但取决于实际解析的内容,这是一个非常好的观点。 使用\b 查看我的答案,它在两个位置都有效(甚至在开始/结束时)。 谢谢你这么多的影子和很好的解释。【参考方案2】:

如果您要在野外寻找地址,请使用否定前瞻:

\b((?!172)\d1,3\.\d1,3\.\d1,3\.\d1,3)\b

查看demo on regex101.com

【讨论】:

【参考方案3】:

试试这个:

^172\.(?:\b(?:(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.)2(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\b|null)$

它不仅检查以 172 开头的 ip 地址,还检查有效的 ip - 地址,即每个值不能超过 255

现场演示在这里https://regex101.com/r/lA1gA4/1

【讨论】:

以上是关于正则表达式查找除 IP 地址以外的所有 IP 地址以 172 开头的主要内容,如果未能解决你的问题,请参考以下文章

正则表达式匹配 IP 地址 [关闭]

利用正则表达式:找到一段字符串中所有的IP地址和Email地址

如何利用js正则表达式判断ip地址的合法性

正则表达式实例

如何用正则表达式匹配出如下代码中的IP地址跟IP地址归属地?

IP地址的正则表达式写法