次のコードがあります:
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
なぜそうなのか説明してください。
パターンは貪欲ではないため、一致で構成されている間は、テキストの一致をできるだけ少なくします。
?を削除します2番目のグループで、あなたは得るでしょう
語
単語単語大小
Matcher mtch = Pattern.compile("test is a (\\s*.+?\\s*) Word (\\s*.+\\s*)").matcher(test);
\\s*
を使用すると、0個のスペースを含む任意の数のスペースに一致します。 w
は(\\s*.+?\\s*)
と一致します。スペースで区切られた単語と一致することを確認するには、(\\s+.+?\\s+)
を試してください