-4

我看到这个正则表达式将匹配一个 IP 地址:\b(?:\d{1,3}.){3}\d{1,3}\b

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

所以提供 1.2.3.4 它只会匹配 1.2.3

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

4

2 回答 2

1

首先,您提供的正则表达式不正确。它会匹配一个 IP 地址,但也会匹配192a168.1f12. 原因是因为.是正则表达式中的特殊字符,它等同于任何字符。用 a 转义它,\这样你就得到\b(?:\d{1,3}\.){3}\d{1,3}\b了一个 IP 地址正则表达式。

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

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

此外,您实际上并不需要不匹配的组,因此您可以将正则表达式简化为:

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

于 2013-07-11T20:13:06.673 回答
0

做这个:

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

好吧,以上是什么意思?很好地\d匹配一个数字,{1,3} 表示应该有 1-3 个数字,不多也不少。点.实际上匹配任何字符(包括点,更准确地说\.是t真的知道做什么?:。但是{2}后面那些说模式将重复两次,然后最后一个\d{1,3}匹配第三个八位字节。

于 2013-07-11T19:46:04.310 回答