我有以下Java代码:
Pattern p = Pattern.compile("#.*;", Pattern.DOTALL);
Matcher m = p.matcher("# $0 := Spec(x,y) with default {{\n System.out.println(x+y);\n }};");
while (m.find()) {
System.out.println("Found: " + m.group() + ".");
}
我得到了:
Found: # $0 := Spec(x,y) with default {{
System.out.println(x+y);
}};.
这正是我想要的。但是使用上面的模式,我希望它匹配#
和第一个分号;
之间的任何内容,而不是最后一个。即,我希望它匹配$0 := Spec(x,y) with default {{ System.out.println(x+y);
。为什么它与最后一个分号匹配?
答案 0 :(得分:2)
Pattern p = Pattern.compile("#.*?;", Pattern.DOTALL);
在?
之后附加*
,使您的模式不贪婪。*
贪婪并将消耗它所能达到的最大值。