python编程自然数表达式_正则表达式 – 匹配有限自然数系列

干得好.在Perl v5.10到v5.14上测试过.关键是递归模式,我们在(?& Sequence)规则上进行递归.这是一种归纳证明.

bigint是为了防止您真的想要生成1 … 10 ** 10_000的序列.如果您可以将自己限制为机器本机整数,32位或64位,具体取决于您的平台,它将运行得更快.

#!/usr/bin/env perl

use v5.10;

use bigint; # only if you need stuff over maxint

my $pat = qr{

^

(?= 1 \b )

(?

(? \d+ )

(?:

\s+

(??{ "(?=" . (1 + $+{Number}) . ")" })

(?&Sequence)

)?

)

$

}x;

# first test embedded data

while () {

if ( /$pat/ ) {

print "PASS: ",$_;

} else {

print "FAIL: ",$_;

}

}

# now generate long sequences

for my $big ( 2,10,25,100,1000,10_000,100_000 ) {

my $str = q();

for (my $i = 1; $i <= $big; $i++) {

$str .= "$i ";

}

chop $str;

if ($str =~ $pat) {

print "PASS: ";

} else {

print "FAIL: ";

}

if (length($str) > 60) {

my $len = length($str);

my $first = substr($str,10);

my $last = substr($str,-10);

$str = $first . "[$len chars]" . $last;

}

say $str;

}

__END__

5

fred

1

1 2 3

1 3 2

1 2 3 4 5

1 2 3 4 6

2 3 4 6

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19

1 2 3 4 5 6 6

哪个运行产生:

FAIL: 5

FAIL: fred

PASS: 1

PASS: 1 2 3

FAIL: 1 3 2

PASS: 1 2 3 4 5

FAIL: 1 2 3 4 6

FAIL: 2 3 4 6

PASS: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19

FAIL: 1 2 3 4 5 6 6

PASS: 1 2

PASS: 1 2 3 4 5 6 7 8 9 10

PASS: 1 2 3 4 5 [65 chars]2 23 24 25

PASS: 1 2 3 4 5 [291 chars] 98 99 100

PASS: 1 2 3 4 5 [3892 chars]8 999 1000

PASS: 1 2 3 4 5 [588894 chars]999 100000

看似自私的风险,有a book涵盖了这种事情.请参阅Programming Perl,第4版第5章中的“花式模式”部分.您需要查看“命名组”,“递归模式”和“语法模式”的新章节.这本书是在打印机上,应该在一两天内以电子方式提供.

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值