我正在尝试编写一个lex模式,以便识别包括CIDR表示法的IPV6地址。我使用的模式如下所示。
IPV6ADDRESS_CIDR 的正则表达式未按预期工作。我正在进行测试,使用的是:
它似乎不能正确识别它。我在这里犯了什么错误吗?
IPV4ADDRESS_CIDR [ \t]*(((2(5[0-5]|[0-4][0-9])|[01]?[0-9][0-9]?)\.){3}(2(5[0-5]|[0-4][0-9])|[01]?[0-9][0-9]?)(\/(3[012]|[12]?[0-9])))[ \t]*
IPV4ADDRESS [ \t]*(([[:digit:]]{1,3}"."){3}([[:digit:]]{1,3}))[ \t]*
hex4 ([[:xdigit:]]{1,4})
hexseq ({hex4}(:{hex4})*)
hexpart ({hexseq}|({hexseq}::({hexseq}?))|::{hexseq})
IPV6ADDRESS [ \t]*({hexpart}(":"{IPV4ADDRESS})?)[ \t]*
IPV6ADDRESS_CIDR [ \t]*(IPV6ADDRESS)(\/(1[01][0-9]|12[0-8]|[0-9]{1,2}))[ \t]*
IPV6ADDRESS_CIDR 的正则表达式未按预期工作。我正在进行测试,使用的是:
2001:1234::5678:5:6:7:8/64
它似乎不能正确识别它。我在这里犯了什么错误吗?
::
和各种数字),或者说将所有的定义名称都放在{}
(IPV6ADDRESS
)内。那个模式甚至能编译吗?顺便说一句,在单独的规则中跳过空格可能是一个更好的主意;在每个令牌的末尾添加空格通常不会很好地工作。 - rici