CIDR 表示法中 IPv4 地址的正则表达式
regular expression for ipv4 address in CIDR notation
我使用以下正则表达式来匹配 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("nnMATCH [%s]nn", 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 }
IPV4ADDRESS
模式中的"/
"需要转义("/
")。
flex
模式中未转义的"/
"是尾随上下文运算符。
相关文章:
- 使用正则表达式regex_search在字符串中查找字符串
- 在 C++ 中使用正则表达式错误时出现问题 括号表达式中的范围无效
- C++正则表达式无限循环
- FindPackageHandleStandardArgs.cmake:137 的 CMake 错误(消息):找不到 Boost (缺少:正则表达式)(找到合适的版本"1.72.0",
- 定义有趣的宏和正则表达式在Z3 C++绑定
- 带有多个字符分隔符的正则表达式
- C++ 使用增强正则表达式库时断言崩溃
- 有人可以帮助我处理正则表达式吗?
- 使用正则表达式获取大括号块的列表
- 正则表达式以匹配数字的重复模式,后跟任何类型的分隔符?
- 组合正则表达式部分使用 | 不起作用的 C++
- 为什么C++正则表达式这么慢?
- 如何使HTML5电子邮件验证正则表达式在C++中工作?
- 在C++中实现正则表达式
- C++正则表达式替换整个单词
- 用C++编写正则表达式的正确方法是什么?
- 如何从Stroustrup的C++书中解释这个正则表达式?
- 为什么这个正则表达式C++在括号表达式中抛出无效范围异常?
- C++:匹配正则表达式,什么是匹配?
- CIDR 表示法中 IPv4 地址的正则表达式