12

C スタイルのコメントとその区切り記号を削除しようとしています。簡単に思えますが、私は車輪を回しています。これは私がしようとしているものです:

$code =~ s/\/\*.+\*\//g;

ただし、エラーは次のとおりです。

Substitution replacement not terminated

何をすべきか?

4

3 に答える 3

18

置換置換は次の形式を取ります。

s/FIND/REPLACE/FLAGS

区切り文字は多くの文字のいずれでもかまいません。したがって、スラッシュを含むパターンを処理する場合は、別の区切り文字を使用する方がよい場合がよくあります#

ここでの置換置換には、置換セクションがありません。区切り文字としてでは#なく使用すると、これはおそらくより明確になります。/

$code =~ s#\/\*.+\*\/#g;

おそらく使用しようとしているのは次のとおりです。

$code =~ s/\/\*.+\*\///g;

または明確にするために、

$code =~ s#/\*.+\*/##g;

#は代わりに区切り文字として使用されているため、エスケープする必要がなくなったことに注意してください/

于 2013-03-22T19:02:29.970 に答える
2

あなたは書くつもりだった$code =~ s/\/\*.+\*\///g;

パターンで傾いた楊枝を使用する必要はありません。

$code =~ s{ /[*] .+ [*]/ }{}gx;

ただし、これですべての可能性をうまく処理できるわけではないことに気付くでしょう。そのためには、Perlを使用してファイルから複数行のCコメントを削除するにはどうすればよいですか?を参照してください。

于 2013-03-22T19:04:07.600 に答える
1

このスレッドごとに、次のことが機能しました。

$code =~ s#/\*.*?\*/##sg;

于 2013-03-22T19:14:21.003 に答える