查找C样式注释块(/ * * /),但不使用正则表达式查找字符串中的那些注释?

问题描述 投票:0回答:1

我的问题是我有一个程序通过标准C文件(在这里我只是使用了文本文件)。我能够识别注释,但是无法识别字符串中的注释块。因此,例如:

printf("This should be counted as a comment: /* */");

但是它说,既然找到了/ * * /,那是真的。我正在使用的正则表达式模式

((['"])(?:(?!\2|\\).|\\.)*\2)|\/\/[^\n]*|\/\*(?:[^*]|\*(?!\/))*\*\/

只需使其包含双引号的字符串即可。

java c regex comments
1个回答
-1
投票

如果要删除注释,则可以使用正则表达式来匹配字符串和注释,并仅将注释替换为空字符串((Java 9 +)

]
    Pattern regex = Pattern.compile(
        "(?s)((?<!\\\\)\".*?(?<!\\\\)\"|(?<!\\\\)'.*?(?<!\\\\)'|/\\*.*?\\*/)");

    // Assuming 'text' is the file contents string
    String textWithoutComments = regex.matcher(text).replaceAll(m -> {
        char c = m.group().charAt(0);
        return c == '\'' || c == '"' ? m.group() : "";
    });

正则表达式在多行中查找双引号或单引号对(带有负向后缀以忽略转义符)或c样式注释。匹配替换项lambda函数如果带引号,则返回原始匹配项,否则返回空白字符串以替换注释。

最新问题
© www.soinside.com 2019 - 2024. All rights reserved.