Java正则表达式(对我来说)意外行为

时间:2014-10-28 10:33:07

标签: java regex

我有以下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);。为什么它与最后一个分号匹配?

1 个答案:

答案 0 :(得分:2)

Pattern p = Pattern.compile("#.*?;", Pattern.DOTALL);

?之后附加*,使您的模式不贪婪。*贪婪并将消耗它所能达到的最大值。