Welcome to OGeek Q&A Community for programmer and developer-Open, Learning and Share
Welcome To Ask or Share your Answers For Others

Categories

0 votes
317 views
in Technique[技术] by (71.8m points)

regex - What is a regular expression for matching numbers divisible by 4?

I want to make a lexical analyzer that detects numbers divisible by 4.
Sample code -

%%
16(divisible by 4) {printf("divisible by 4 %s
",yytext);}
%%
main()
{
        yylex();
}
See Question&Answers more detail:os

与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
Welcome To Ask or Share your Answers For Others

1 Reply

0 votes
by (71.8m points)

Divisibility by 4

The single-digit numbers which are divisible by 4 are 0, 4, and 8.

The two-digit numbers which are divisible by 4 can be divided into two groups:

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

Any number which is three or more digits and ends in any of these two-digit numbers is divisible by four.

Therefore, the regular expression should search for numbers of the form d*[02468][048], or the form d*[13579][26], or the single digit numbers 0, 4, and 8.

The Regex

This regular expression matches all numbers, positive or negative, which are divisible by 4:

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

Note that this could match part of a number, such as 24 in 1245. If you want to make sure that you only match an entire number, you could add negative look-around expressions:

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

or you could use word boundaries:

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

与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
OGeek|极客中国-欢迎来到极客的世界,一个免费开放的程序员编程交流平台!开放,进步,分享!让技术改变生活,让极客改变未来! Welcome to OGeek Q&A Community for programmer and developer-Open, Learning and Share
Click Here to Ask a Question

...