首页 > 解决方案 > 排除特定 ip 模式的正则表达式

问题描述

我正在通过正则表达式过滤特定的 IP 地址。例如,应排除最后一个八位字节中包含 1 的所有 IP 地址,即 XXX.XXX.XXX.1,但不能排除 11 或 123 或 125。示例:

正则表达式应丢弃
192.168.1.1
192.168.20.1
192.168.30.1
但不应丢弃
192.168.1.101
192.168.20.103
我已将正则表达式尝试为 :
^(?!\d{1,3}\.\d{1,3}\.\d{1,3}\.[^\1]).*$
但无法按预期排除。

任何帮助表示赞赏!

标签: javascript

解决方案


当匹配最后一个八位字节时,使用(?:1\d+|[02-9]\d*)$- 匹配一个 1 后跟其他数字,或者匹配不是1 的东西,可能后跟其他数字:

^\d{1,3}(?:\.\d{1,3}){2}\.(?:1\d+|[02-9]\d{0,2})$

https://regex101.com/r/gB5c6z/1

另一种选择,负前瞻:

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


推荐阅读