繁体   English   中英

匹配被4整除的数字的正则表达式是什么?

[英]What is a regular expression for matching numbers divisible by 4?

我想做一个词法分析器来检测被4整除的数字。
示例代码-

%%
16(divisible by 4) {printf("divisible by 4 %s\n",yytext);}
%%
main()
{
        yylex();
}

被4除数

可被4整除的一位数字是0、4和8。

可被4整除的两位数字可以分为两组:

12, 16, 32, 36, 52, 56, 72, 76, 92, 96
20, 24, 28, 40, 44, 48, 60, 64, 68, 80, 84, 88

任何三位数或更多位数并且以这些两位数结尾的数字都可以被四整除。

因此,正则表达式应搜索的形式的数字\\d*[02468][048]或形式\\d*[13579][26]或单位数字04 ,和8

正则表达式

此正则表达式匹配所有可被4整除的正数或负数:

-?(?:\d*[02468][048]|\d*[13579][26]|[048])

请注意,这可以匹配数字的一部分,例如1245 24 如果要确保只匹配一个整数,则可以添加否定的环顾四周表达式:

(?<!\d)-?(?:\d*[02468][048]|\d*[13579][26]|[048])(?!\d)

或者您可以使用单词边界:

\b-?(?:\d*[02468][048]|\d*[13579][26]|[048])\b
%%  
[0-9]+  {int number = atoi(yytext); if((number % 4) == 0) printf("Div_4 %d\n", number);}
%%

main()
{
        yylex();
}

由于lex/flex支持C,因此您可以将字符串另存为整数,然后在C中进行检查。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM