我使用下面的正则表达式来匹配CIDR表示法中的ipv4地址。
[ \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]*
我已经使用http://regexpal.com/测试了上面的代码
它似乎与下面的示例192.168.5.10/24
相匹配
然而,当我在flex中使用相同的示例时,它显示“无法识别的规则”.Is,在flex中有一些限制,因为它不支持所有功能?在没有使用任何扩展features.Can的情况下,上面的正则表达式看起来非常简单。有人指出为什么flex无法识别该规则。
下面是一个简短的自包含示例,它演示了这个问题
IPV4ADDRESS [ \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]*
SPACE [ \t]
%x S_rule S_dst_ip
%%
%{
BEGIN S_rule;
%}
<S_rule>(dst-ip){SPACE} {
BEGIN(S_dst_ip);
}
<S_dst_ip>\{{IPV4ADDRESS}\} {
printf("\n\nMATCH [%s]\n\n", yytext);
BEGIN S_rule;
}
. { ECHO; }
%%
int main(void)
{
while (yylex() != 0)
;
return(0);
}
int yywrap(void)
{
return 1;
}
当我尝试执行flex test.l时,它给出了“无法识别的规则”错误。我想要匹配
dst-ip { 192.168.10.5/10 }
发布于 2012-12-14 08:28:00
IPV4ADDRESS
模式中的"/
“需要转义("\/
")。
flex
模式中未转义的"/
“是trailing context操作符。
https://stackoverflow.com/questions/13869340
复制相似问题