1
我使用下面的正則表達式來匹配CIDR表示法中的ipv4地址。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;
}
當我嘗試做彎曲test.l它給「無法識別的規則」 error.I想匹配
dst-ip { 192.168.10.5/10 }
什麼是之後的「(dst-ip)」?爲什麼圍繞IPV4ADDRESS的兩個級別{}? –
我想匹配dst-ip {192.168.10.5/10}這兩個級別{}用於括號。 – liv2hak