准确的IP检测正则表达式帮助

时间:2010-09-17 16:35:45

标签: .net regex

我需要使用正则表达式找到内部IP地址,我已设法做到了,但在以下情况下,所有4都匹配。我需要一个与第一个匹配但与以下匹配的正则表达式3.每一行都是不同的输入。

! "version 10.2.0.4.0 detected"
+ "version 10.2.0.42 detected"
+ "version 10.2.0.4 detected"
+ "version 10.2.0.4"

编辑:我当前的正则表达式是

(?-i)\b10\.2.(?:[0-9]|[0-9][0-9]|1[0-9][0-9]|2[0-4][0-9]|25[0-5])\.(?:[0-9]|[1-9][0-9]|1[0-9][0-9]|2[0-4][0-9]|25[0-5])\b

有什么想法吗?

3 个答案:

答案 0 :(得分:2)

在PCRE中:

/\b((1?[1-9]?[0-9])|(2[0-4][0-9])|(25[0-5]))(\.((1?[1-9]?[0-9])|(2[0-4][0-9])|(25[0-5]))){3}\b/

这是一个相当严格的匹配,不允许多个零,所以00.00.00.00无效(0.0.0.0是)。

答案 1 :(得分:1)

我认为@ wrikken的答案是正确的,但是在其中一篇已删除的帖子的评论中:

这是:

(?<![0-9]\.)((?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.){3}(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)(?!\.[0-9])

答案 2 :(得分:0)

使用您希望与IP匹配的正则表达式(上述两种方法中的任何一种适用于您的方案),并在开头使用(?:^|\s+),在结尾使用(?:\s+|$)以确保有空格或者没有价值。

  • (?:)定义了一个不捕获其内容的组
  • ^是行/字符串的开头,$是行\字符串的结尾
  • \s+是一个或多个空白字符
  • |是替换运算符,即|
  • 两侧的一个或另一个选项

使用表达式作为起点,最终得到

(?-i)(?:^|\s+)10\.2.(?:[0-9]|[0-9][0-9]|1[0-9][0-9]|2[0-4][0-9]|25[0-5])\.(?:[0-9]|[1-9][0-9]|1[0-9][0-9]|2[0-4][0-9]|25[0-5])(?:\s+|$)