4

有没有办法在 C 风格的块注释中包含 */ ?在这种情况下,不能将块注释更改为一系列行注释 (//)。

这是导致问题的注释的示例:

/**
 * perl -pe 's/(?<=.{6}).*//g' : Limit to PID
 */
4

5 回答 5

24

通常评论不需要是字面的,所以这不会经常出现。

您可以将其全部包装在 #if 块中:

#if 0
whatever you want can go here, comments or not
#endif
于 2009-05-13T21:18:07.487 回答
10

没有!没有。

于 2009-05-13T21:16:59.890 回答
3

您可以通过修改您的正则表达式以不包含有问题的字符序列来回避这个问题。从你正在做的事情来看,这应该可以工作(使 * 非贪婪):

/**
 * perl -pe 's/(?<=.{6}).*?//g' : Limit to PID
 */
于 2009-05-13T21:29:53.287 回答
2

在一般情况下,你不能。

这是在这种情况下发生的一个棘手的答案:

/**
 * perl -pe 's/(?<=.{6}).* //gx' : Limit to PID
 */

这是(或者应该是,我实际上并没有测试 perl 命令)一个与原始匹配相同的正则表达式,因为 x 修饰符允许在表达式中使用空格以保持清晰,从而允许*/.

你可以使用更多的空格,我只包含了打破注释块标记结尾的单个空格。

一些编译器支持打开允许嵌套注释的非标准功能的选项。这通常是一个坏主意,但在这种特殊情况下,您也可以这样做

/** 
 * /* perl -pe 's/(?<=.{6}).*//g' : Limit to PID
 */

仅针对此源文件打开该选项。当然,正如上面片段中时髦的颜色所证明的那样,您的其他工具可能不知道您在做什么,并且会做出错误的猜测。

于 2009-05-13T21:28:51.790 回答
0

对于这种特定情况,您可以更改perl 正则表达式上的分隔符。您可以使用任何非字母数字、非空白分隔符。在这里我切换到#

/** 
 * perl -pe 's#(?<=.{6}).*##g' : Limit to PID
 */

常见的选择是#%

像括号或大括号这样的“括号字符”的语法略有不同,因为它们应该是匹配的对:

/** 
 * perl -pe 's[(?<=.{6}).*][]g' : Limit to PID
 */
于 2009-05-14T17:00:14.173 回答