You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

正则表达式过滤A类网络指定IP范围异常问题求助

解决正则表达式匹配10.0.0.1至10.20.0.254 IP范围的问题

首先,咱们先拆解你的核心需求:你要匹配的是10.A.0.C格式的IP,其中:

  • A的取值范围是0到20
  • C的取值范围是1到254

你当前的正则有几个关键问题,导致错误匹配了像10.2.120.0这类不符合要求的IP:

  1. 未转义的点号:正则里的.是特殊字符,匹配任意单个字符,不是字面意义上的点。你写的10.会匹配10后面跟任意字符,而不仅仅是.,这会引发很多意外匹配。
  2. 未限制第三个 octet 为0:你的需求里第三个段必须是0,但原正则的第三个分组([0-1]|[0-9]|20)允许匹配单个数字(比如120里的第一个1),加上未转义的点,就会错误命中10.2.120.0这种IP。
  3. A段的匹配逻辑错误:原正则的A段([0-9]{1,3})没有范围限制,会匹配0-999的任意数字,远超你需要的0-20;同时后面的分组写法也不对,无法正确匹配10-19这类两位数。

正确的正则表达式

针对你的需求,我整理了两个版本,根据使用场景选择:

场景1:匹配整行的IP地址(比如单独一行就是一个IP)

echo '10.2.0.5' | egrep '^10\.(20|1[0-9]|[0-9])\.0\.(25[0-4]|2[0-4][0-9]|[1-9][0-9]?|[1-9])$'

各部分解释:

  • ^ 和 $:锚定行首和行尾,确保匹配的是完整的一行IP,不会匹配到IP的一部分或者前后带其他字符的内容。
  • 10\.:匹配字面量的10.,转义后的\.只匹配点号。
  • (20|1[0-9]|[0-9]):精准匹配A段(0-20):
    • 20:直接匹配数字20
    • 1[0-9]:匹配10-19的数字
    • [0-9]:匹配0-9的单个数字
  • \.0\.:固定匹配第三个段为0,确保只有10.x.0.x格式的IP会被匹配。
  • (25[0-4]|2[0-4][0-9]|[1-9][0-9]?|[1-9]):匹配C段(1-254):
    • 25[0-4]:匹配250-254
    • 2[0-4][0-9]:匹配200-249
    • [1-9][0-9]?:匹配10-99
    • [1-9]:匹配1-9

场景2:从文本中提取符合要求的IP(IP前后可能有其他字符)

如果你的IP是在一段文本中(比如日志行里),可以去掉行锚点,改用单词边界\b避免匹配到更长的数字(比如100.0.0.1里的10):

echo 'Server IP: 10.20.0.254, Invalid: 10.2.120.0' | egrep -o '\b10\.(20|1[0-9]|[0-9])\.0\.(25[0-4]|2[0-4][0-9]|[1-9][0-9]?|[1-9])\b'

这里用-o选项只输出匹配到的IP部分,\b确保匹配的是完整的IP单词。

测试验证

  • 符合要求的IP:10.0.0.1、10.15.0.100、10.20.0.254都会被正确匹配。
  • 不符合要求的IP:10.2.120.0(第三个段不是0)、10.21.0.5(A段超过20)、10.0.0.0(C段为0)、10.0.0.255(C段为255)都不会被匹配。

内容的提问来源于stack exchange,提问作者Joe

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.29 15:17:32