2013-10-26 3 views
1

Мне нужно регулярное выражение для ipv6 адресов с помощью следующей маски: 2620: 0000: 2820 ::/48найти регулярное выражение для ipv6 диапазона адресов

То есть я хочу в регулярное выражение, которое может представлять следующий круг адреса:

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

К

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

Как об этом Regex: -

'/^(?>(?>([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

Смежные вопросы