groovy或java:如何使用/ ** *** /中的正则表达式检索注释块?

时间:2010-10-07 19:11:19

标签: java regex groovy

对于java专家来说,这可能是件小事。请帮帮我:

我的程序中有一段评论如下:

/********* 
block of comments - line 1
line 2
.....
***/

如何使用正则表达式检索“评论块”?

感谢。

3 个答案:

答案 0 :(得分:2)

这样的事情应该做:

    String str =
        "some text\n"+
        "/*********\n" +
        "block of comments - line 1\n" +
        "line 2\n"+
        "....\n" +
        "***/\n" +
        "some more text";

    Pattern p = Pattern.compile("/\\*+(.*?)\\*+/", Pattern.DOTALL);
    Matcher m = p.matcher(str);

    if (m.find())
        System.out.println(m.group(1));

DOTALL表示模式中的.也应与新行字符匹配) 打印:

block of comments - line 1
line 2
....

答案 1 :(得分:2)

Pattern regex = Pattern.compile("/\\*[^\\r\\n]*[\\r\\n]+(.*?)[\\r\\n]+[^\\r\\n]*\\*+/", Pattern.DOTALL);

这是有效的,因为注释不能嵌套在Java中。

使用不情愿的量词(.*?)非常重要,否则我们将匹配文件中第一条评论与最后一条评论的所有内容,无论中间是否存在实际代码。

/\*匹配/*

[^\r\n]*匹配此行其余部分的任何内容。

[\r\n]+匹配一个或多个换行符。

.*?匹配尽可能少的字符。

[\r\n]+匹配一个或多个换行符。

[^\r\n]*匹配结束*/行的所有字符。

\*/匹配*/

答案 2 :(得分:0)

不确定多线问题,但一切都在一条线上,你可以这样做:

^\/\*.*\*\/$

分解为:

^ start of a line
\/\*+ start of a comment, one or more *'s (both characters escaped)
.* any number of characters
\*+\/ end of a comment, one or more *'s (both characters escaped)
$ end of a line

顺便说一下,它是“正则表达式”而不是“regrex”:)