加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

regex – 正则表达式,用于定义一些二进制序列

发布时间:2020-12-14 06:31:33 所属栏目:百科 来源:网络整理
导读:你如何编写一个正则表达式来定义0和1的所有字符串,作为二进制数,表示一个3的倍数的整数. 一些有效的二进制数将是: 11110100111001111 使用DFA here,我们可以通过以下方式制作正则表达式,其中A,B,C表示DFA的状态. A = 1B + 0AB = 1A + 0CC = 1C + 0BC = 1*0B
你如何编写一个正则表达式来定义0和1的所有字符串,作为二进制数,表示一个3的倍数的整数.

一些有效的二进制数将是:

11
110
1001
1100
1111
使用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

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读