正規表現の1つの形式をPerl互換の正規表現に変換しています。%s
toのすべてのオカレンスを置き換える必要がある\s
ので、次のようにします。
$s =~ s/(?<!%)%s/\s/g;
しかし、それは私にエラーを与えます:Unrecognized escape \s passed through at ....
。実際、私は問題がどこにあるかを理解しているので、おそらく未知のエスケープシーケンスを文字列に変換することはできません。しかし、どうすればこれを回避できますか?
次のように \ をエスケープするだけです。
$s =~ s/(?<!%)%s/\\s/g;
例えば
my $s = "this is a %s test with two %s sequences, the last one here %%s not changed";
$s =~ s/(?<!%)%s/\\s/g;
print "$s\n";
版画
this is a \s test with two \s sequences, the last one here %%s not changed
(%%s を最終的に %s にする必要があるかどうかはわかりません。必要な場合は、少し調整するか、それを行うには 2 番目の正規表現が必要です)。