my %ipv6_patterns = (
'preferred' => [
qr/^(?:[a-f0-9]{1,4}:){7}[a-f0-9]{1,4}$/i,
\&ipv6_parse_preferred,
],
'compressed' => [ ## No, this isn't pretty.
qr/^[a-f0-9]{0,4}::$/i,
qr/^:(?::[a-f0-9]{1,4}){1,6}$/i,
qr/^(?:[a-f0-9]{1,4}:){1,6}:$/i,
qr/^(?:[a-f0-9]{1,4}:)(?::[a-f0-9]{1,4}){1,6}$/i,
qr/^(?:[a-f0-9]{1,4}:){2}(?::[a-f0-9]{1,4}){1,5}$/i,
qr/^(?:[a-f0-9]{1,4}:){3}(?::[a-f0-9]{1,4}){1,4}$/i,
qr/^(?:[a-f0-9]{1,4}:){4}(?::[a-f0-9]{1,4}){1,3}$/i,
qr/^(?:[a-f0-9]{1,4}:){5}(?::[a-f0-9]{1,4}){1,2}$/i,
qr/^(?:[a-f0-9]{1,4}:){6}(?::[a-f0-9]{1,4})$/i,
\&ipv6_parse_compressed,
],
'ipv4' => [
qr/^(?:0:){5}ffff:(?:\d{1,3}\.){3}\d{1,3}$/i,
qr/^(?:0:){6}(?:\d{1,3}\.){3}\d{1,3}$/,
\&ipv6_parse_ipv4,
],
'ipv4 compressed' => [
qr/^::(?:ffff:)?(?:\d{1,3}\.){3}\d{1,3}$/i,
\&ipv6_parse_ipv4_compressed,
],
);
|