我使用下面的正则表达式来匹配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/] [1]
测试了上述内容它似乎与以下示例192.168.5.10/24
然而,当我在flex中使用相同的例子时,它表示“无法识别的规则”。在flex中有一些限制,因为它不支持所有功能吗?上面的正则表达式似乎非常基本,没有使用任何扩展功能。可以指出为什么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 }