【问题标题】:IPv6 regex issueIPv6 正则表达式问题
【发布时间】:2014-01-17 20:24:38
【问题描述】:

所以从技术上讲,这不是重复的帖子。我正在尝试确定为什么我无法让我的拆分正则表达式进行验证。我决定将其拆分,以使其更具可读性。它曾一度奏效,但现在由于某种原因,我似乎无法让它合作。我是否不小心在不应该添加的地方添加了一些东西?正则表达式开头的额外 (|) 是允许空 IPv6 地址。

这是代码:(是的,这是在一个函数中,我只是没有包含其余部分。)

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

【问题讨论】:

  • 错误是什么?或者你的正则表达式在什么情况下不起作用?
  • 它不工作期间。它什么也没做。
  • 您可能需要该标志来忽略空格;它可能会按字面意思换行并将它们包含在表达式中。
  • 这是一个令人难以置信的坏主意,也是使用错误工具完成工作的完美例子。您应该使用具有 inet_pton() 函数的语言,然后可能从您的 shell 脚本中调用它。

标签: regex bash ipv6


【解决方案1】:

似乎速记 \d 在 bash 中不起作用。以下对我有用:

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2013-01-16
    • 2011-01-25
    • 1970-01-01
    相关资源
    最近更新 更多