代码文件中多行注释的正则表达式

时间:2014-02-12 04:43:56

标签: java regex

我正在尝试在源文件中编写注释模式

他们可以是/** comments **/

/**
* comments
* comments
**/

所以我写的是......

\/\*\*([a-zA-Z0-9\n ]*)*\*\*\/

我这样做是因为我假设一个新行只是一个字符并将其添加到方括号中。

4 个答案:

答案 0 :(得分:2)

我可以想到两个选择:

(?s)\/\*\*(?:(?!\*\*\/).)*\*\*\/

\/\*\*(?:(?!\*\*\/)[\s\S])*\*\*\/

第一个是如果你不介意点匹配换行符,第二个是如果你介意的话。

非捕获组将加速一个档次,这个负前瞻构造阻止了**/的匹配并匹配任何其他内容。

答案 1 :(得分:0)

匹配多行注释可以通过将其划分为“安全”部分来完成,即保证不包含*/的部分,但它们仍应匹配任意数量的其他*/。这可以通过在任何*/之间要求至少一个“安全”字符来完成。安全字符是*/之内的任何字符。然后每个部分将如下所示:

\**[^\*\/]+\/* 

安全部分以任意数量的*开头,后跟至少一个安全字符,后跟任意数量的/。多行注释可能会以许多*后面没有安全字符结束,或者以安全字符前面没有任意数量的/开头,所以它们也必须被考虑在内。

结果为\/\*\/*后跟任意数量的安全部分,后跟\*+\/,即

\/\*\/*((\**[^\*\/]+\/*)*)\*+\/

答案 2 :(得分:-1)

您可以尝试以下代码来检测单行注释和多行通信。

import java.util.regex.Pattern;
import java.util.regex.Matcher;
public class HelloWorld{

     public static void main(String []args){
         String test="/**\n"
         +"* some text\n"
         +"* some text\n"
         +"**/"
         +"non comment\n"
         +"/**some text \n**/" +
         "//single line comment";

         int count=0;
        String pattern_string="(\\/\\/)|(\\/\\*(\\*)?([\\*\\w\\d\\s]*(\\n)?)*(\\*)?\\*\\/)";
        Pattern pattern=Pattern.compile(pattern_string);
        Matcher matcher=pattern.matcher(test);
        while(matcher.find())
        {
            count++;
        }
        System.out.println(count);
     }
}

这将计算代码中的评论总数。

答案 3 :(得分:-1)

试试这个...

/\*((\w)?(\W)?)*\*/