我看到这个正则表达式将匹配IP地址: \ b(?:\ d {1,3}。){3} \ d {1,3} \ b正则表达式匹配IP地址的前三个八位字节
我该如何改变它,使它只会匹配IP地址的前三个八位字节?
所以提供了1.2.3.4它只会匹配1.2.3
谢谢! 新手到正则表达式。
我看到这个正则表达式将匹配IP地址: \ b(?:\ d {1,3}。){3} \ d {1,3} \ b正则表达式匹配IP地址的前三个八位字节
我该如何改变它,使它只会匹配IP地址的前三个八位字节?
所以提供了1.2.3.4它只会匹配1.2.3
谢谢! 新手到正则表达式。
这样做:
address: \b(?:\d{1,3}.){2}\d{1,3}\b
奥莱特那么,是什么上面呢?以及\d
匹配一个数字,{1,3}表示不应该有1-3位数字,不能少于。点.
实际上匹配任何字符(包括点,更正确的将是\.
)因为我们在括号内有这个声明,在这里我必须承认我不知道你正在使用哪种语言,虽然我怀疑它是PHP,所以我真的不知道?:
做什么。但在{2}
之后说模式会重复两次,然后最后的\d{1,3}
与第三个八位字节匹配。
谢谢。还有一个问题,如果你不介意。有没有办法匹配IP地址的最后八位字节? – John
你有更多关于如何匹配的信息吗? IP在字符串的末尾吗?你想提取一个完整的IP地址的最后八位字节?等等。 –
首先,你提供的正则表达式是不正确的。它将匹配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
如果你知道你的分隔符是什么样子,那么你并不需要一个正则表达式,你需要“分裂”。 – 2013-07-11 20:25:01