首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >CIDR表示法中ipv4地址的正则表达式

CIDR表示法中ipv4地址的正则表达式
EN

Stack Overflow用户
提问于 2012-12-14 06:07:24
回答 1查看 1.8K关注 0票数 1

我使用下面的正则表达式来匹配CIDR表示法中的ipv4地址。

代码语言:javascript
运行
复制
[ \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无法识别该规则。

下面是一个简短的自包含示例,它演示了这个问题

代码语言:javascript
运行
复制
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时,它给出了“无法识别的规则”错误。我想要匹配

代码语言:javascript
运行
复制
dst-ip { 192.168.10.5/10 }
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2012-12-14 08:28:00

IPV4ADDRESS模式中的"/“需要转义("\/")。

flex模式中未转义的"/“是trailing context操作符。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/13869340

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档