正则表达式匹配前三个八位字节的IP地址

时间:2013-07-11 19:43:06

标签: regex

我看到这个正则表达式将匹配一个IP地址: \ B(?:\ d {1,3})。{3} \ d {1,3} \ B'/ P>

如何更改它以使其仅匹配IP地址的前三个八位字节?

因此1.2.3.4提供它只匹配1.2.3

谢谢! 新手到正则表达式。

2 个答案:

答案 0 :(得分:1)

首先,您提供的正则表达式不正确。它会匹配IP地址,但也会匹配192a168.1f12。原因是因为.是正则表达式中的一个特殊字符,它等同于任何字符。使用\进行转义,以便获得\b(?:\d{1,3}\.){3}\d{1,3}\b,并且您拥有IP地址正则表达式。

然后,分析正则表达式 - 它由两个主要部分组成 - a.b.c.部分的部分,其中a,b和c是一到三位的数字(技术上不是IP地址,因为它应该转到255,但它足够接近)然后是最后一到三位数的部分。 请注意,第一部分以{3}结尾,指定它应该出现3次。您希望它只出现2次,然后是相同的第二部分,因此您得到\b(?:\d{1,3}\.){2}\d{1,3}\b

这对你来说应该足够了,但是根据你的要求,你也可以通过使用正向前瞻来确保前三个八位字节后跟最后一个八位字节(但不匹配)。

另外,你真的不需要一个不匹配的组,所以你可以简化你的正则表达式:

\b(\d{1,3}\.){2}\d{1,3}\b

答案 1 :(得分:0)

这样做:

address: \b(?:\d{1,3}.){2}\d{1,3}\b

好吧那么上面的意思是什么?好\d匹配一个数字,{1,3}意味着不应该有1-3个数字,不能少。点.实际上匹配任何字符(包括点,更正确地是\.)因为我们在括号内有这个语句,在这里我不得不承认我不知道你正在使用哪种语言虽然我怀疑它是PHP,所以我真的不知道?:的作用。但是{2}之后的那些表示模式将重复两次,然后最后\d{1,3}匹配第三个八位字节。