正则表达式-如何在包含更多点的数字的字符串中找到IP



我试图从一个字符串中匹配IP,该字符串可能也包含带更多点的数字(例如1.2.3.4.5.6.7(

如果我用符号x代替点,Regex工作得很好:

RexEx: .*b(0x0x0x0)b.*
String: 0x0x0x0x0x0 ff 0x0x0x0 yy 0x0x0x0x0x0
Result: 0x0x0x0x0x0 ff **0x0x0x0** yy 0x0x0x0x0x0

但当我寻找IP(带点(时:

RegEx:  .*b(0.0.0.0)b.*
String:  0.0.0.0.0.0 ff 0.0.0.0 yy 0.0.0.0.0.0
Result: 0.0.0.0.0.0 ff 0.0.0.0 yy 0.0.**0.0.0.0**

我收到最后一个点号的尾部

如何使用dot检索IP?

要查找四个不被更多点分隔数字包围的点分隔数字。。。说出你在找什么。

(?<!d.)(?<!d)d+(.d+){3}(?!.?d)

这两个lookbehinds是因为大多数PCRE兼容引擎不允许可变长度的lookbehind(所以不能说(?<!d.?)(。所以我们明确地说,匹配之前的字符串不能匹配d.,也不能匹配d。比赛后的展望用一个可选的点很好地涵盖了这两种情况。

演示:https://regex101.com/r/YMmdtT/1

这是因为点不是单词字符,而x是,所以b不会用点来裁剪它。您可能想用[^.]之类的东西替换b(请参阅此演示(,或者在运行正则表达式之前,只需用x-es替换句点。

最新更新