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

时间:2016-09-16 06:00:22

标签: javascript php regex node.js regex-negation

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

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

3 个答案:

答案 0 :(得分:2)

正则表达式中的

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

另外要将它限制为仅以172开头的ip地址,只需将其硬编码到你的正则表达式中就像这样:

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

Regular expression visualization

Debuggex Demo

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

或者,如果您没有从IP地址列表开始,您可以使用负面预测直接抓取它们。

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

Regular expression visualization

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

Regular expression visualization

Debuggex Demo

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

  

[10:01:22]来自10.14.242.211的连接确定。

答案 1 :(得分:0)

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

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

查看demo on regex101.com

答案 2 :(得分:0)

试试这个:

^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)$

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

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