我可以使用正则表达式来搜索数字的倍数吗?

che*_*sam 10 regex

我正在尝试搜索一个大项目的所有示例,我已经声明了一个数组[48]作为大小或任何48的倍数.

我可以使用正则表达式函数来查找48*n的匹配项吗?

谢谢.

irc*_*ell 20

在这里(使用PHP的PCRE语法):

^(0*|(1(01*?0)*?1|0)+?0{4})$
Run Code Online (Sandbox Code Playgroud)

用法:

preg_match('/^(0*|(1(01*?0)*?1|0)+?0{4})$/', decbin($number));
Run Code Online (Sandbox Code Playgroud)

现在,它为什么工作:

我们知道48真的是公正的3 * 16.16只是2*2*2*2.因此,任何可被2 ^ 4整除的数字将在其二进制表示0中具有4个最多位.因此,通过结束regexp 0{4}$等同于说该数字可被2^4(或16)整除.那么,左边的位需要被3整除.所以使用这个答案的正则表达式,我们可以判断它们是否可被3整除.因此,如果整个正则表达式匹配,则数字可以被3和16整除,因此48 ......

QED ...

(注意,前导0|案例在$number0 时处理失败的匹配).我从这个测试的所有数字048^5,并正确每次比赛...