尝试删除C风格的评论及其分隔符。看起来很简单,但我正在转动轮子。这就是我想要的:
$code =~ s/\/\*.+\*\//g;
然而,我得到的错误是:
Substitution replacement not terminated
怎么办?
答案 0 :(得分:12)
替换替换采用以下形式:
s/FIND/REPLACE/FLAGS
请注意,分隔符可以是多个字符中的任何一个。因此,在处理包含斜杠的模式时,通常最好使用不同的分隔符,例如#
。
您的替换替换位置缺少替换部分。如果我们使用#
而不是/
作为分隔符,这可能更清楚:
$code =~ s#\/\*.+\*\/#g;
您可能打算使用的是:
$code =~ s/\/\*.+\*\///g;
或者为了清楚起见,
$code =~ s#/\*.+\*/##g;
请注意,由于#
被用作分隔符,因此不再需要转义/
。
答案 1 :(得分:1)
你打算写$code =~ s/\/\*.+\*\///g;
您不必在模式中使用倾斜的牙签:
$code =~ s{ /[*] .+ [*]/ }{}gx;
虽然,你可能会意识到这并不能很好地处理所有可能性。为此,请参阅How can I strip multiline C comments from a file using Perl?
答案 2 :(得分:1)
每this thread,以下工作:
$code =~ s#/\*.*?\*/##sg;