我想为可被 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
正则表达式必须尽可能短或长一点,但要美观。
正则表达式将用于许多不同的编程语言。因此,您可以针对您喜欢的语言提出特定的表达方式。
我的可被 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,})$