正则表达式IPv6验证和可选方括号?

时间:2012-04-16 20:00:26

标签: regex ipv6

嗨,所有正则表达式新手都在这里。

我正在尝试编写一个验证IPv6地址的正则表达式。我还没有添加端口部分,我想先让地址部分工作。

这是我到目前为止所做的:

\\[?(?:[:0-9A-Fa-f]+)\\]?

这使得开始和结束括号可选。但正如您所看到的,它们是独立可选的。有没有办法让正则表达式要求开括号和右括号,或既不

2 个答案:

答案 0 :(得分:3)

正则表达式是字符串模式匹配的一个很好的工具,但你在这里遇到了它的一个弱点。匹配的括号对可能会变得棘手。

在更复杂的情况下 - 即在尝试读取程序代码时 - 解决方案根本不是使用正则表达式,而是使用正确的代码解析器。

即使是相当简单的情况也难以回答,因为所涉及的正则表达式语法非常多毛,而且由于具有更高级的正则表达式功能,不同的实现可能会使用不同的语法。 This question可能会提供一些关于如何处理它的提示,以及您可能使用的不同语法。

但是在你的情况下,问题并不是太复杂,而且一个相当简单的解决方案就是自己:简单地将整个表达式与所需的括号或整个表达式都用括号匹配。换句话说,重复表达式的主要部分两次,一次使用括号,一次不使用,以及它们之间的or管道:

\(\[(?:[:0-9A-Fa-f]+)\])|(?:[:0-9A-Fa-f]+)\

希望有所帮助。

答案 1 :(得分:-1)

我认为这是一个老问题...但是您也可以在此正则表达式中使用:^([0-9a-fA-F] +:){7} [0-9a-fA-F] + $或这一个:^ [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} $