Для того, что вы показываете в своих шаблонах, вы хотите .{3}
для "до 3" матчей, которые вы хотели бы .{,3}
, где {
n ,
m }
- это «квантификатор», задающий не менее n совпадений, но не более m . Если вы опустите число, по умолчанию оно равно 0 или не ограничено.
Чтобы сопоставить ATGC
с ATGAGCA
, я думаю, что вы могли бы хотеть /(?:A[^T]{,3}T[^G]{,3}G[^C]{,3}C)+/
, и поскольку это так регулярно, вы можете сделать это выражение следующим образом:
sub make_match_regex {
my ( $fc, @ch ) = split //, shift;
my $cat = join( '', $fc, map { "[^$_]{,3}$_" } @chars );
return qr/(?:$cat)+/;
}