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

.net 准确的IP检测正则表达式帮助,.net,regex,.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

我需要使用正则表达式查找内部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

有什么想法吗?

使用您想要匹配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+|$)
在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是)。

我认为@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])

(?别忘了最后一个的引号。我假设这是指字符串的结尾,而不是文字引号…谢谢,但我需要的是“\b”+1之前的“(?!\[0-9]),以获得更完整的答案--它应该在.net中工作(根据问题的要求)如果删除前导斜杠和尾随斜杠。斜杠是PCRE的一部分,我在显示正则表达式时总是使用PCRE。@polemon:是的,但问题明确指出.NET是他使用的引擎。@bdukes:不会,由
\b
处理。对不起,我的评论不正确,这没有帮助。正确答案来自Wrikke我的评论,很抱歉误会了。