我需要使用正则表达式找到内部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
有什么想法吗?
答案 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+|$)