如何匹配java正则表达式中注释块之间的文本?

时间:2017-05-10 15:09:46

标签: java regex

我必须匹配/**/之间的文字。这些是java块注释。

现在我创建的程序并没有按预期工作,因为它不会在关闭令牌*/时停止。这是代码:

public static void main(String[] args) {
String s = "public void /* sdksd\n*k/sss\\d\nsd */ main class\n/*String s = null;*/trtgg";
        Matcher matcher = Pattern.compile("(?s)/\\*(.*)(?=\\*/)").matcher(s);
        while (matcher.find()) {
            String group = matcher.group(1);
            System.out.println("group="+group);
        }
}

打印:

group= sdksd
*k/sss\d
sd */ main class
/*String s = null;

预期输出为:

group= sdksd
*k/sss\d
sd 
group=String s = null;

为什么它不会在第一次关闭令牌*/时停止?

还有其他方法可以达到这个目的吗?

1 个答案:

答案 0 :(得分:0)

确实,在(?=\\*/)使用单个字符后,要使正则表达式引擎匹配.*,您需要将*视为懒惰。 这是正确的代码:

Matcher matcher = Pattern.compile("(?s)/\\*(.*?)(?=\\*/)").matcher(s);