用于识别IPV6地址的Lex模式

时间:2012-12-06 03:48:49

标签: c token lex flex-lexer

我在下面给出了一个模式,用于匹配虚线四元组符号中的ipv6地址。

IPV4ADDRESS (([[:digit:]]{1,3}"."){3}([[:digit:]]{1,3}))
hex4         ([[:xdigit:]]{1,4})
hexseq       ({hex4}(:{hex4}*))
hexpart      ({hexseq}|({hexseq}::({hexseq}?))|::{hexseq})
IPV6ADDRESS  ({hexpart}(":"{IPV4ADDRESS})?)

我用

%x S_rule S_dst_ip

<S_rule>(dst-ip){SPACE}   {

           BEGIN(S_dst_ip);

        }


<S_dst_ip>\{{IPV6ADDRESS}\}  {

       /*code to process the sring here.*/
     }

匹配表单

的输入
dst-ip {3ffe:1900:4545:3:200:f8ff:fe21:67cf}

由于某种原因,给定的正则表达式似乎与上述模式不匹配。有人可以在我的代码中指出错误。

有人可以在我的代码中指出错误吗?

1 个答案:

答案 0 :(得分:2)

我认为*可能出错了地方:

hexseq       ({hex4}(:{hex4}*))

这是你的意思吗?

hexseq       ({hex4}(:{hex4})*)