Получить результат ошибки, когда поиск соответствует только один раз - PullRequest
0 голосов
/ 17 июня 2019

Я хотел найти строку, которая совпадает с точным временем в другой строке, в то время как я столкнулся с некоторой проблемой.

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 Ответ

1 голос
/ 17 июня 2019

Если что-то совпадает два раза, это также совпадает один раз.Вот почему ваше «одноразовое» совпадение всегда срабатывает.

Я думаю, что самый простой подход - просто разделить на вашем $cut_seq и проверить количество разбитых элементов.

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

PS Это не считается '$ cut_seq` в конце строки - извините!Вам нужно будет добавить что-то, что не будет частью вашей последовательности, например:

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...