搜索匹配仅一次时得到错误结果

时间:2019-06-17 08:51:15

标签: regex perl match

我遇到了一些问题,但我想在另一个字符串中搜索与精确时间匹配的字符串。

use strict;
use warnings;

my $test="abc1234abc5678abcdef910";
my $cut_seq="abc";

print $test,"\tone time\n" if($test=~/$cut_seq{1}/);

print $test,"\tmore than one times\n" if($test=~/$cut_seq{1,}/);

我希望得到结果:

abc1234abc5678abcdef910 more than one times

但结果显示为:

abc1234abc5678abcdef910 one time
abc1234abc5678abcdef910 more than one times

我也尝试过:

print $test,"\tone time\n" if($test=~/$cut_seq{0,1}/);
print $test,"\tone time\n" if($test=~/$cut_seq{1,1}/);
print $test,"\tmore than one times\n" if($test=~/$cut_seq{1,}/);

但是什么都没有改变。我只是想知道为什么它不能匹配准确的时间。如果某事物匹配两次,那么它也将匹配一次,那么{1},{1,},{1,1},{1,2}有什么区别。我没有创造这些不同形式的意义。

1 个答案:

答案 0 :(得分:1)

如果某项匹配两次,则也匹配一次。这就是为什么您的“一次”比赛总是开始的原因。

我认为,最简单的方法是简单地在您的$cut_seq处进行拆分并检查已拆分元素的数量。

my $test="abc1234abc5678abcdef910";
my $cut_seq="abc";
my @elts= split /$cut_seq/, $test;
print scalar(@elts)-1," times\n";

P.S。这不算在字符串末尾的'$ cut_seq`-对不起!您必须添加一些不属于序列的内容,例如:

my $test="abc1234abc5678abcdef910";
my $cut_seq="abc";
my @elts= split /$cut_seq/, $test . chr(0);
print scalar(@elts)-1," times\n";