我如何修改我编写的IPv6正则表达式,以检测地址(即正在编写正则表达式的方式),还接受“空白”,即用户没有指定IPv6地址?
^[0-9a-fA-F]{1,4}:[0-9a-fA-F]{1,4}:[0-9a-fA-F]{1,4}:[0-9a-fA-F]{1,4}:[0-9a-fA-F]{1,4}:[0-9a-fA-F]{1,4}:[0-9a-fA-F]{1,4}:[0-9a-fA-F]{1,4}$
现在,正则表达式寻找的最小值为0:0:0:0:0:0:0:0或类似值。事实上,除了空白地址之外,我可能还需要能够处理压缩,例如以下地址:
FE80::1
or ::1
etc
谢谢!
*更新*
所以,让我确保我有这个......
(^$|^IPV4)\|(^$|IPV6)\|REST OF STUFF$
这似乎不对。我觉得我错了^和$以及整个正则表达式的开头和结尾。
也许这样:
^(^$|IPV4)\|(^$|IPV6)\|REST$
*更新*
仍然没有运气。这是我的代码的一部分,中间因为理智而被切断:
^(|[0-9]{1,3}.<<<OMIT MIDDLE IPV4>>>.[0-9]{1,3})\|(|(\A([0-9a-f]{1,4}:){1,1}<<<OMIT MIDDLE IPV6>>>[0-1]?\d?\d)){3}\Z))\|[a-zA-Z0-<<<MORE STUFF MIDDLE OMITTED>>>{0,50}$
我希望这不会令人困惑。这是每个正则表达式的开头和结尾都省略了middles所以你可以看到()。
也许我需要将整个巨大的IPV6正则表达式括在括号中?
*更新*
上面的最后一条声明......没有运气。
答案 0 :(得分:0)
您可以使用|
字符指定替换,因此a|b
表示“匹配a
或b
”。在这种情况下,它看起来像这样:
^$|^[0-9a-fA-F]{1,4}:[0-9a-fA-F]{1,4}:[0-9a-fA-F]{1,4}:[0-9a-fA-F]{1,4}:[0-9a-fA-F]{1,4}:[0-9a-fA-F]{1,4}:[0-9a-fA-F]{1,4}:[0-9a-fA-F]{1,4}$
正则表达式^$
将匹配空字符串,因此^$|<current-regex>
表示“匹配空字符串或任何<current-regex>
匹配(在本例中为IPv6)”。如果您希望仅包含空白字符的字符串也被视为“空”,则可以使用^\s*$
代替^$
。
这只是处理问题的第一部分,像FE80::1
那样处理压缩比较复杂,看起来评论中已有一些其他好的答案(注意我不认为这个问题是一个骗局,因为那些问题中不存在“也匹配空字符串”部分。)
编辑如果它是更大的正则表达式的一部分,那么你应该将所有内容都包装在一个组中并删除^$
,这样就像{{1} }。由于(|<current-regex>)
之前没有任何内容,这意味着该组可以匹配空字符串或当前正则表达式匹配的任何内容。
答案 1 :(得分:0)
根据this post on this site所谓的Stack Overflow this other site有一个解释&amp;一个巨大但非常有用的正则表达式的例子是这样的:
(\A([0-9a-f]{1,4}:){1,1}(:[0-9a-f]{1,4}){1,6}\Z)|
(\A([0-9a-f]{1,4}:){1,2}(:[0-9a-f]{1,4}){1,5}\Z)|
(\A([0-9a-f]{1,4}:){1,3}(:[0-9a-f]{1,4}){1,4}\Z)|
(\A([0-9a-f]{1,4}:){1,4}(:[0-9a-f]{1,4}){1,3}\Z)|
(\A([0-9a-f]{1,4}:){1,5}(:[0-9a-f]{1,4}){1,2}\Z)|
(\A([0-9a-f]{1,4}:){1,6}(:[0-9a-f]{1,4}){1,1}\Z)|
(\A(([0-9a-f]{1,4}:){1,7}|:):\Z)|
(\A:(:[0-9a-f]{1,4}){1,7}\Z)|
(\A((([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})\Z)|
(\A(([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})\Z)|
(\A([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}\Z)|
(\A([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}\Z)|
(\A([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}\Z)|
(\A([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}\Z)|
(\A([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}\Z)|
(\A(([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}\Z)|
(\A:(:[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}\Z)