正則表達式判斷一個二進制數是否能被3整除


一個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


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM