2014-01-17 2 views
-2

Так что это не технически дублирующее сообщение. Я пытаюсь определить, почему я не могу получить регулярное выражение для разделения. Я решил разбить его, чтобы он был более читабельным. Он работал в какой-то момент, но теперь по какой-то причине я не могу заставить его сотрудничать. Я случайно добавил что-то там, где я не должен был? Дополнительный (|) в самом начале регулярного выражения - это разрешить пустой IPv6-адрес.IPv6 regex issue

Вот код: (Да это в функции, я просто не включают в себя все остальное.)

local IPV6="^(|([0-9a-f]{1,4}:){1,1}(:[0-9a-f]{1,4}){1,6}|" 
"([0-9a-f]{1,4}:){1,2}(:[0-9a-f]{1,4}){1,5}|" 
"([0-9a-f]{1,4}:){1,3}(:[0-9a-f]{1,4}){1,4}|" 
"([0-9a-f]{1,4}:){1,4}(:[0-9a-f]{1,4}){1,3}|" 
"([0-9a-f]{1,4}:){1,5}(:[0-9a-f]{1,4}){1,2}|" 
"([0-9a-f]{1,4}:){1,6}(:[0-9a-f]{1,4}){1,1}|" 
"(([0-9a-f]{1,4}:){1,7}|:):|" 
":(:[0-9a-f]{1,4}){1,7}|" 
"((([0-9a-f]{1,4}:){6})(25[0-5]|2[0-4]\d|[0-1]?\d?\d)(\.(25[0-5]|2[0-4]\d|[0-1]?\d?\d)){3})|" 
"(([0-9a-f]{1,4}:){5}[0-9a-f]{1,4}:(25[0-5]|2[0-4]\d|[0-1]?\d?\d)(\.(25[0-5]|2[0-4]\d|[0-1]?\d?\d)){3})|" 
"([0-9a-f]{1,4}:){5}:[0-9a-f]{1,4}:(25[0-5]|2[0-4]\d|[0-1]?\d?\d)(\.(25[0-5]|2[0-4]\d|[0-1]?\d?\d)){3}|" 
"([0-9a-f]{1,4}:){1,1}(:[0-9a-f]{1,4}){1,4}:(25[0-5]|2[0-4]\d|[0-1]?\d?\d)(\.(25[0-5]|2[0-4]\d|[0-1]?\d?\d)){3}|" 
"([0-9a-f]{1,4}:){1,2}(:[0-9a-f]{1,4}){1,3}:(25[0-5]|2[0-4]\d|[0-1]?\d?\d)(\.(25[0-5]|2[0-4]\d|[0-1]?\d?\d)){3}|" 
"([0-9a-f]{1,4}:){1,3}(:[0-9a-f]{1,4}){1,2}:(25[0-5]|2[0-4]\d|[0-1]?\d?\d)(\.(25[0-5]|2[0-4]\d|[0-1]?\d?\d)){3}|" 
"([0-9a-f]{1,4}:){1,4}(:[0-9a-f]{1,4}){1,1}:(25[0-5]|2[0-4]\d|[0-1]?\d?\d)(\.(25[0-5]|2[0-4]\d|[0-1]?\d?\d)){3}|" 
"(([0-9a-f]{1,4}:){1,5}|:):(25[0-5]|2[0-4]\d|[0-1]?\d?\d)(\.(25[0-5]|2[0-4]\d|[0-1]?\d?\d)){3}|" 
":(:[0-9a-f]{1,4}){1,5}:(25[0-5]|2[0-4]\d|[0-1]?\d?\d)(\.(25[0-5]|2[0-4]\d|[0-1]?\d?\d)){3})$" 

if [[ !($ADDRESS =~ $IPV6) ]]; then 
    echo "OOPS" 
    return 
fi 
+0

Какая ошибка? Или в каком случае ваше регулярное выражение не работает? – nhahtdh

+0

Не работает период. Это ничего не значит. – Atomiklan

+0

Возможно, вам нужен флаг, чтобы игнорировать пробелы; это, скорее всего, приведет к разрыву строк буквально и включит их в выражение. – brandonscript

ответ

1

Похоже, стенографии \d не работает в Баш. Следующие работы для меня:

R10='([0-9a-f]{1,4}:){7}[0-9a-f]{1,4}' 
R11='([0-9a-f]{1,4}:){1,1}(:[0-9a-f]{1,4}){1,6}' 
R12='([0-9a-f]{1,4}:){1,2}(:[0-9a-f]{1,4}){1,5}' 
R13='([0-9a-f]{1,4}:){1,3}(:[0-9a-f]{1,4}){1,4}' 
R14='([0-9a-f]{1,4}:){1,4}(:[0-9a-f]{1,4}){1,3}' 
R15='([0-9a-f]{1,4}:){1,5}(:[0-9a-f]{1,4}){1,2}' 
R16='([0-9a-f]{1,4}:){1,6}(:[0-9a-f]{1,4}){1,1}' 
R17='(([0-9a-f]{1,4}:){1,7}|:):' 
R18=':(:[0-9a-f]{1,4}){1,7}' 
R0='(25[0-5]|2[0-4][0-9]|[0-1]?[0-9]?[0-9])(\.(25[0-5]|2[0-4][0-9]|[0-1]?[0-9]?[0-9])){3}' 
R1='(([0-9a-f]{1,4}:){6})' 
R2='([0-9a-f]{1,4}:){1,1}(:[0-9a-f]{1,4}){1,4}:' 
R3='([0-9a-f]{1,4}:){1,2}(:[0-9a-f]{1,4}){1,3}:' 
R4='([0-9a-f]{1,4}:){1,3}(:[0-9a-f]{1,4}){1,2}:' 
R5='([0-9a-f]{1,4}:){1,4}(:[0-9a-f]{1,4}){1,1}:' 
R6='(([0-9a-f]{1,4}:){1,5}|:):' 
R7=':(:[0-9a-f]{1,4}){1,5}:' 
local IPV6="^(${R10}|${R11}|${R12}|${R13}|${R14}|${R15}|${R16}|${R17}|${R18}|${R19}|${R1}${R0}|${R2}${R0}|${R3}${R0}|${R4}${R0}|${R5}${R0}|${R6}${R0}|${R7}${R0})\$" 
if [[ !($ADDRESS =~ $IPV6) ]]; then 
    echo "OOPS" 
    return 
fi