3

大家好,这里的正则表达式新手。,

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

这是我到目前为止所拥有的:

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

这使得打开和关闭括号是可选的。但正如您所见,它们是独立可选的。正则表达式有没有办法同时要求左括号和右括号,或者两者都不要求?

4

2 回答 2

3

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

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

即使是相当简单的情况也可能难以回答,因为所涉及的正则表达式语法可能非常复杂,而且还因为像这样的更高级的正则表达式功能,不同的实现可能使用不同的语法。这个问题可能会提供一些关于如何去做的提示,以及您可能使用的不同语法。

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

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

希望有帮助。

于 2012-04-16T20:28:33.233 回答
-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}$

于 2019-08-21T13:24:20.390 回答