Мне трудно определить, какие символы должны экранироваться при использовании конструкции Perl qr{}
Я пытаюсь создать многострочное предварительно скомпилированное регулярное выражение для текста, которое содержит множество обычно экранированных символов (#*.>:[]), а также содержит другое предварительно скомпилированное регулярное выражение. Кроме того, мне нужно максимально строго соответствовать для целей тестирования.
my $output = q{# using defaults found in .config
*
*
Options:
1. opt1
> 2. opt2
choice[1-2?]: };
my $sc = qr{(>|\s)}smx;
my $re = qr{# using defaults found in .config
*
*
Options:
$sc 1. opt1
$sc 2. opt2
choice[1-2?]: }mx;
if ( $output =~ $re ) {
print "OK!\n";
}
else {
print "D'oh!\n";
}
Ошибка:
Quantifier follows nothing in regex; marked by <-- HERE in m/# using defaults found in .config
* <-- HERE
*
Options:
(?msx-i:(>|\s)) 1. opt1
(?msx-i:(>|\s)) 2. opt2
choice[1-2?]: / at ./so.pl line 14.
Попытка уйти от звездочек приводит к неудачному совпадению (выход D'oh). Попытка избежать других надоедливых символов также приводит к неудачному совпадению. Я мог бы продолжать пробовать разные комбинации того, что нужно для побега, но здесь есть много вариантов, и я надеюсь, что кто-то сможет дать некоторое представление.