2013-10-26 55 views
1

我需要与下列掩模正则表达式对IPv6地址: 2620:0000:2820 ::/48查找为IPv6地址范围内的正则表达式

即我想可以表示以下范围的正则表达式地址:

2620:0000:2820:0000:0000:0000:0000:0000 

TO

2620:0000:2820:ffff:ffff:ffff:ffff:ffff 

到目前为止,我能想出这样的:

"^(2620:0000:2820:){1}:[0-9a-fA-F]{4}:[0-9a-fA-F]{4}:[0-9a-fA-F]{4}:[0-9a-fA-F]{4}:[0-9a-fA-F]{4}$" 

什么是正确的表达?

+0

你得到了什么问题? – sln

+0

只需将“{4}”更改为“{1,4}' – sln

+0

”如果您学会了如何使用锤子,那么每个问题看起来都像是钉子。你不应该那样做 - 你总会错过什么。例如,你会错过这个:'2620:0000:2820:0000 :: 0000:0000'和这个:'2620:0000:2820:ffff :: 0000',谁知道还有什么。正确的解决方案是将IPv6转换为内部表示并使用位 – mvp

回答

0

这个怎么样正则表达式: -

'/^(?>(?>([a-f0-9]{1,4})(?>:(?1)){7}|(?!(?:.*[a-f0-9](?>:|$)){8,})((?1)(?>:(?1)){0,6})?::(?2)?)|(?>(?>(?1)(?>:(?1)){5}:|(?!(?:.*[a-f0-9]:){6,})(?3)?::(?>((?1)(?>:(?1)){0,4}):)?)?(25[0-5]|2[0-4][0-9]|1[0-9]{2}|[1-9]?[0-9])(?>\.(?4)){3}))$/iD' 

还要检查这个reference

+0

匹配'::' – sln

+0

我会怀疑这种类型的正则表达式,因此不需要使用lookahead。如果没有这种需要,汇编应该导致明确的通过或失败。 – sln