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
于 2013-03-22T19:14:21.003 回答