我有IPv6地址的正则表达式下面正则表达式地址
IPV4ADDRESS [ \t]*(([[:digit:]]{1,3}"."){3}([[:digit:]]{1,3}))[ \t]*
x4 ([[:xdigit:]]{1,4})
xseq ({x4}(:{x4}){0,7})
xpart ({xseq}|({xseq}::({xseq}?))|::{xseq})
IPV6ADDRESS [ \t]*({xpart}(":"{IPV4ADDRESS})?)[ \t]*
给出它是正确的IPv6的所有格式地址,包括
的IPv61) non-compressed IPv6 addresses
2) compressed IPv6 addresses
3) IPv6 addresses in legacy formats.(supporting IPv4)
理想的例子中遗留格式地址将是
2001:1234::3210:5.6.7.8
OR
2001:1234:1234:5432:4578:5678:5.6.7.8
As you can see above there are 10 groups separated by either `":" or ".".`
而不是正常的IPv6地址中的8组。这是因为最后4个由“”隔开的组。应该被压缩成最低有效的32位IPv6地址。因此我们需要10个组来满足128位。
然而如果我使用下面的地址格式
2001:1234:4563:3210:5.6.7.8
这里,每个组由“:”分隔表示由separted 16 bits.the最后四个基团“”代表8比特。总比特数是64 + 32 = 96比特.32比特丢失
正则表达式接受它作为有效的IPv6地址格式。我无法弄清楚如何修正正则表达式丢弃这样的价值。任何帮助都非常感谢。
你能否解释提供的否定例子有什么问题? –
上面解释了这个例子。由“:”分隔的每个组代表16位。最后的四个组由“。”分隔。代表8比特。总比特数是64 + 32 = 96比特。丢失32比特。 – liv2hak
那么,它也接受:: 0:999.999.999.999这样的废话。 – nneonneo