能被7整除的二进制数的正则表达式[关闭]

问题描述 投票:0回答:1

我想为可被 7, 14, 28, ...整除的非空二进制序列编写正则表达式,根据序列末尾的零计数,每个序列都有自己的正则表达式,并且所有正则表达式都将具有相同的基础。

这是 7 的余数表:

from #     : 0 1 2 3 4 5 6
to 2*# + 0 : 0 2 4 6 1 3 5  mod 7
to 2*# + 1 : 1 3 5 0 2 4 6  mod 7
         |   ^-^-^-^-^-^-^- vertices
       edges

通过这些余数,我为 DFA 制作了一个图表 regex-div-7-init.png

正则表达式必须尽可能短或长一点,但要美观。

正则表达式将用于许多不同的编程语言。因此,您可以针对您喜欢的语言提出特定的表达方式。

regex binary division dfa binary-string
1个回答
0
投票

我的可被 7 整除的数字的简短版本:

 (0|1(1|0((0|11)(1|00))*((0|11)01|10))\
(01*0(0|1((1|00)(0|11))*((1|00)10|01)))*1)+

删除空格和反斜杠后为 80 个字符:

(0|1(1|0((0|11)(1|00))*((0|11)01|10))(01*0(0|1((1|00)(0|11))*((1|00)10|01)))*1)+

对于可被 (7 * 2^N) 整除的数字:

# divisible by 14
^(0+|(0*1(1|0((0|11)(1|00))*((0|11)01|10))(01*0(0|1((1|00)(0|11))*((1|00)10|01)))*1)+0+)$

# divisible by 28
^(0+|(0*1(1|0((0|11)(1|00))*((0|11)01|10))(01*0(0|1((1|00)(0|11))*((1|00)10|01)))*1)+0{2,})$

# divisible by 56
^(0+|(0*1(1|0((0|11)(1|00))*((0|11)01|10))(01*0(0|1((1|00)(0|11))*((1|00)10|01)))*1)+0{3,})$
© www.soinside.com 2019 - 2024. All rights reserved.