15

次のコードがあります:

public static void createTokens(){
    String test = "test is a word word word word big small";
    Matcher mtch = Pattern.compile("test is a (\\s*.+?\\s*) word (\\s*.+?\\s*)").matcher(test);
    while (mtch.find()){
        for (int i = 1; i <= mtch.groupCount(); i++){
            System.out.println(mtch.group(i));
        }
    }
}

そして次の出力があります:

word
w

しかし、私の意見では、それは次のようになります。

word
word

なぜそうなのか説明してください。

4

2 に答える 2

17

あなたのパターンは貪欲ではないので、一致で構成されている間、それらは可能な限り少ないテキストに一致しました。

?を削除します
2番目のグループでは、単語
単語単語大小を取得します

Matcher mtch = Pattern.compile("test is a (\\s*.+?\\s*) word (\\s*.+\\s*)").matcher(test);
于 2012-01-19T18:22:03.400 に答える
3

使用\\s*することにより、0個のスペースを含む任意の数のスペースに一致します。 w一致し (\\s*.+?\\s*)ます。スペースで区切られた単語と一致することを確認するには、(\\s+.+?\\s+)

于 2012-01-19T18:23:35.993 に答える