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

Regex for find All ip address except IP address starts with 172

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

我写了一些正则表达式 ^\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}$ 可以找到所有的 ip 地址。

正则表达式中的

. 是匹配所有内容的字符。要在此上下文中使用它,您必须对其进行转义。

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

^172\.\d{1,3}\.\d{1,3}.\d{1,3}$

Debuggex Demo

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


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

^(?!172)\d{1,3}\.\d{1,3}\.\d{1,3}.\d{1,3}$

Debuggex Demo


要小心一点,因为这可能会匹配比 IP 地址更多的地址 - 例如 400.660.226.602 会被捕获 - 即使真实 IP4 地址不包含大于 255 的数字。也许这不会影响您的用例 - 但需要记住这一点。


根据下面的评论,如果您要在文档中的任何位置搜索 IP 地址,而不是单独一行,请使用 \b 而不是 ^$

\b(?!172)\d{1,3}\.\d{1,3}\.\d{1,3}.\d{1,3}\b

Debuggex Demo

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

[10:01:22] Connection from 10.14.242.211 established.

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

\b((?!172)\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3})\b

看到一个demo on regex101.com

试试这个:

^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