java 正则判断二进制_regex – 正则表达式,用于定义一些二进制序列

使用DFA

here,我们可以通过以下方式制作正则表达式,其中A,B,C表示DFA的状态.

A = 1B + 0A

B = 1A + 0C

C = 1C + 0B

C = 1*0B // Eliminate recursion

B = 1A + 0(1*0B)

B = 01*0B + 1A

B = (01*0)*1A // Eliminate recursion

A = 1(01*0)*1A + 0A

A = (1(01*0)*1 + 0)A

A = (1(01*0)*1 + 0)* // Eliminate recursion

导致PCRE正则表达式如下:

/^(1(01*0)*1|0)+$/

Perl测试/示例:

use strict;

for(qw(

11

110

1001

1100

1111

0

1

10

111

)){

print "$_ (",eval "0b$_",") ";

print /^(1(01*0)*1|0)+$/? "matched": "didnt match";

print "\n";

}

11 (3) matched

110 (6) matched

1001 (9) matched

1100 (12) matched

1111 (15) matched

0 (0) matched

1 (1) didnt match

10 (2) didnt match

111 (7) didnt match

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值