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

如何用正则表达式区分数字与IP地址片段?

匹配非IP片段的X.Y格式数字正则方案

当使用正则\d+\.\d+时,会同时命中独立的X.Y格式数字(如5.56),以及IP地址的片段(比如183.55.0.144中的183.55、0.144)。我们需要一个正则,只匹配以下测试示例中的目标内容,同时排除IP片段:

测试示例

  • 示例1:<some_text> 5.56 <some_text> → 需匹配5.56
  • 示例2:<some_text> 183.55.0.144 <some_text> → 需排除所有IP片段
  • 示例3:4544445555.6877878487874 → 需匹配完整数字
  • 示例4:1.75. → 需匹配1.75

已尝试的正则及问题

  • \d+\.\d+:会匹配IP片段,不符合要求
  • \d+\.\d(?!\.):无法匹配示例4中末尾带点的1.75
  • (?<!\.)\d+\.\d+:仍会匹配IP的最后一段(如0.144)
  • (?<!\.)\d+\.\d(?!\.):同时限制前后无点,漏过示例4
  • (?!(?:[0-9]{1,3}\.){3}[0-9]{1,3})\d+\.\d+(?!\.)\d+:逻辑接近但存在匹配漏洞
  • \d+\.(?!(?:\.\d+){2})\d+:无法处理IP前半段的匹配问题
  • (?<!(?:\.\d){2})\d+\.(?!(?:\.\d+){2})\d+:仍有部分IP片段会被误匹配

解决方案正则

使用结合负前瞻和负后顾的正则,精准排除IP片段:

(?<!\d\.)\d+\.\d+(?!\.\d)

正则解释

  • (?<!\d\.):负后顾断言,确保当前匹配的内容前面不是「数字+点」的结构,避免匹配IP的中间后段(如55.0这类属于IP的一部分)
  • \d+\.\d+:核心匹配逻辑,匹配X.Y格式的数字
  • (?!\.\d):负前瞻断言,确保当前匹配的内容后面不是「点+数字」的结构,避免匹配IP的前段(如183.55这类属于IP的一部分)

测试验证

  • 示例1:成功匹配5.56
  • 示例2:IP地址中无符合规则的片段,全部排除
  • 示例3:成功匹配完整的4544445555.6877878487874
  • 示例4:成功匹配1.75(因为后面是单独的点而非「点+数字」,满足负前瞻条件)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.31 04:01:56