首页 > 其他 > 详细

正则表达式判断一个二进制数是否能被3整除

时间:2019-08-29 22:31:17      阅读:119      评论:0      收藏:0      [点我收藏+]

一个01串S能匹配如下表达式当且仅当S是一个可以被3整除的二进制数,

^1((10*1)|(01*0))*10*$

可以手动试一试,输入如下代码到浏览器的控制台,回车运行:

javascript:alert(/^1((10*1)|(01*0))*10*$/.test("1000000100"))

原理其实很简单,虽然我还不会正则表达式,这里只解释下其对应的有限状态自动机。

有限状态自动机和正则表达式是可以相互转化的。

建立有限状态自动机,定义每个状态为模3的余数,起始态和终态都是0,

技术分享图片

 

 举个例子:

对于 S=11011,初始在状态0,S取第一位1,到状态1;S取第二位1,到状态0;S取第三位0,仍在状态0;S取剩下两位,0变1又回到0。最终在0,说明S模3的余数为0,能整除。

 

 

参考链接:

1. http://www.matrix67.com/blog/archives/1089

2. https://blog.csdn.net/happymff/article/details/72453290

正则表达式判断一个二进制数是否能被3整除

原文:https://www.cnblogs.com/lfri/p/11432176.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!