我遇到了一些问题,但我想在另一个字符串中搜索与精确时间匹配的字符串。
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}有什么区别。我没有创造这些不同形式的意义。
答案 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";