我强烈怀疑您已经展示了问题的简化版本,在这种情况下,任何解决方案都可能不适用于实际情况。
-*
然而,通过在字符之间穿插(即零个或多个连字符)来构建正则表达式似乎是最简单的。
该程序以这种方式工作,构建一个正则表达式B-*C-*D-*E
并将其与两个示例字符串进行比较。
use strict;
use warnings;
my @strings = qw/ ABCDEF -AB---CD--E-F--- /;
my ($start, $end) = (1, 4);
my $substr = substr $strings[0], $start, $end-$start + 1;
my $regex = join '-*', split //, $substr;
$regex = qr/$regex/;
for my $string (@strings) {
if ($string =~ $regex) {
printf "Substring found at %d to %d in string %s\n", $-[0], $+[0]-1, $string;
}
}
输出
Substring found at 1 to 4 in string ABCDEF
Substring found at 2 to 10 in string -AB---CD--E-F---