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 出力)。他の厄介な文字をエスケープしようとしても、一致は失敗します。エスケープするもののさまざまな組み合わせを試し続けることもできますが、ここには多くのバリエーションがあり、誰かが洞察を提供できることを望んでいます.