3
Pattern pattern = Pattern.compile("(\\S+)\\s+(.+?)\\s+(\\S+)");
Matcher matcher = pattern.matcher("IA HEART RATE 184");

それで、私の質問は、なぜ上記のパターンがグループ 2 で心拍数をキャプチャするのかということです。'.+' はスペース文字を含む 1 つ以上の文字と一致してはならないので、グループ 2 はハートレートをキャプチャしないでください。一致 (.+?)\s+ 正しい ? では、なぜ心拍数と一致するのでしょうか?

PS私はマッチ()を使用していました

4

1 に答える 1

3

をどのように使用しているかを示していませんが、本当に必要なのはそのメソッドであるときに、そのメソッドmatcherを使用していると思います。は文字列全体に対してパターンを一致させる必要があり、それを行う唯一の方法は、グループ 2 を にすることです。(グループ 2 が だけの場合、グループ 3 は になり、パターン内の何にも一致しない末尾があります。) を使用していた場合、グループ 2 は だけになります。文字列の一部に一致するパターン。matches()find()matches()HEART RATEHEARTRATE 184find()HEART

また、意味を誤解している可能性もあります+?。全体的に一致するようにしながら、可能な限り一致を少なくしようとします。(.+?)\s+完全に一致することができHEART RATE ます。パターンの残りの部分が一致するのを妨げない限り、に一致することを好むだけです。HEART 

于 2012-08-28T17:03:44.283 に答える