1

正規表現の1つの形式をPerl互換の正規表現に変換しています。%stoのすべてのオカレンスを置き換える必要がある\sので、次のようにします。

$s =~ s/(?<!%)%s/\s/g;

しかし、それは私にエラーを与えます:Unrecognized escape \s passed through at ....。実際、私は問題がどこにあるかを理解しているので、おそらく未知のエスケープシーケンスを文字列に変換することはできません。しかし、どうすればこれを回避できますか?

4

1 に答える 1

3

次のように \ をエスケープするだけです。

$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 番目の正規表現が必要です)。

于 2013-02-20T18:30:55.950 に答える