0

我正在尝试使用简单的正则表达式来匹配模式但得到一些意想不到的结果......

搜索模式和结果如下,

public class Test {

    public static void main(String[] args) throws IOException {
        Pattern p = Pattern.compile(".*xx");
        Matcher m = p.matcher("yyxxxyxx");
        while (m.find()){
            System.out.println("match start");
            System.out.println("Start = " + m.start());
            System.out.println("End = " + m.end());
            System.out.println("Group = " + m.group());

        }

    }
}

结果:

match start
Start = 0
End = 8
Group = yyxxxyxx

预期结果:

match start
Start = 0
End = 4
Group = yyxx
match start
Start = 4
End = 8
Group = xyxx

有人可以解释正则表达式是如何运作的吗?

4

2 回答 2

1

正如您在问题标题中提到的那样,*这里是贪婪的。这意味着它将在仍然匹配的同时尽可能多的字符。你只需要添加?让它变得懒惰。

.*?xx
于 2013-09-30T02:31:03.490 回答
1

贪婪意味着它会在它决定找到整个组之前尽可能地走。您的正则表达式基本上说“以'xx'结尾的任意数量的字符”。由于整个字符串与该描述匹配,因此您将整个字符串作为一个组。

也许您打算使用惰性匹配器而不是贪婪匹配器?

于 2013-09-30T02:31:31.560 回答