2013-07-11 119 views
-4

我看到这个正则表达式将匹配IP地址: \ b(?:\ d {1,3}。){3} \ d {1,3} \ b正则表达式匹配IP地址的前三个八位字节

我该如何改变它,使它只会匹配IP地址的前三个八位字节?

所以提供了1.2.3.4它只会匹配1.2.3

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

+2

如果你知道你的分隔符是什么样子,那么你并不需要一个正则表达式,你需要“分裂”。 – 2013-07-11 20:25:01

回答

0

这样做:

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

奥莱特那么,是什么上面呢?以及\d匹配一个数字,{1,3}表示不应该有1-3位数字,不能少于。点.实际上匹配任何字符(包括点,更正确的将是\.)因为我们在括号内有这个声明,在这里我必须承认我不知道你正在使用哪种语言,虽然我怀疑它是PHP,所以我真的不知道?:做什么。但在{2}之后说模式会重复两次,然后最后的\d{1,3}与第三个八位字节匹配。

+1

谢谢。还有一个问题,如果你不介意。有没有办法匹配IP地址的最后八位字节? – John

+0

你有更多关于如何匹配的信息吗? IP在字符串的末尾吗?你想提取一个完整的IP地址的最后八位字节?等等。 –

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