我必须匹配/*
和*/
之间的文字。这些是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;
为什么它不会在第一次关闭令牌*/
时停止?
还有其他方法可以达到这个目的吗?
答案 0 :(得分:0)
确实,在(?=\\*/)
使用单个字符后,要使正则表达式引擎匹配.*
,您需要将*视为懒惰。
这是正确的代码:
Matcher matcher = Pattern.compile("(?s)/\\*(.*?)(?=\\*/)").matcher(s);