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

正则表达式提取IP地址:为何Regex 2无法匹配所有样本IP?

为什么Regex2无法匹配样本中的所有IP地址?

咱们先拆解两个正则表达式的核心区别,就能一眼看出问题所在:

关键差异点

  • Regex 1 中,每个IP段(比如123、105这类)后面的匹配规则是 (\.|\b):意思是要么是点号.,要么是单词边界\b。
  • Regex 2 中,对应的规则是 (\.|$):意思是要么是点号.,要么是字符串结束位置$。

为什么这个差异会导致匹配失败?

要理解这个问题,得先搞懂\b和$的本质区别:

  • \b是单词边界:只要一边是单词字符(数字、字母、下划线),另一边是非单词字符(比如@、#、!)或者字符串的开头/结尾,这个位置就会被\b匹配到。
  • $是字符串结束标记:只有当IP的最后一个字符正好是整个字符串的最后一个字符时,才会被匹配到。

现在看样本里那些Regex2抓不到的IP场景:

  1. 被非单词字符包围的IP:比如@102.021.031.246@@@@@@里的102.021.031.246,它的最后一段246后面跟着的是@(非单词字符)。Regex1的\b能识别246(单词字符)和@(非单词字符)之间的边界,所以可以完整匹配这个IP;但Regex2里没有\b,只有\.或$,这里既不是点号也不是字符串结尾,所以匹配失败。
  2. 末尾带特殊字符的IP:比如样本最后的23.124.23.144#,最后一段144后面是#,同样不符合Regex2的\.或$规则,Regex1靠\b能匹配到144和#之间的边界,所以没问题。
  3. 中间夹在特殊字符中的IP:比如02.021.031.246@@@@..@里的IP,最后一段后面是@,和第一个情况一样,Regex2无法识别这个位置,自然匹配不到。

总结

Regex1用\b覆盖了IP后面跟着任意非单词字符的场景,而Regex2的$只覆盖IP在字符串绝对末尾的情况。当IP不是字符串最后一个内容,后面还有其他非单词字符时,Regex2就无法完成匹配了。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.25 07:59:05