in reply to
match a range of characters multiple times but they might scattered in the string
>perl -wMstrict -le
"my $range = quotemeta 'ARKYGZX';
;;
my $rng = qr{ [$range] }xms;
my $not_rng = qr{ [^$range] }xms;
;;
for my $s (qw(
AAA RR XXK AxA xAxxYxxRx
A xAx ARKYGZX XxZxGxYxKxRxA AxAxAxA xYYYYx xRRRRRx RRRR
)) {
my $match = $s =~ m{
\A $not_rng* $rng (?: $not_rng* $rng){1,2} $not_rng* \z
}xms;
printf qq{%s match : '%s' \n}, $match ? ' ' : 'NO', $s;
}
"
match : 'AAA'
match : 'RR'
match : 'XXK'
match : 'AxA'
match : 'xAxxYxxRx'
NO match : 'A'
NO match : 'xAx'
NO match : 'ARKYGZX'
NO match : 'XxZxGxYxKxRxA'
NO match : 'AxAxAxA'
NO match : 'xYYYYx'
NO match : 'xRRRRRx'
NO match : 'RRRR'
Update: Apply quotemeta directly to $range initialization, don't use \Q \E