我有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