3

次の文字列から情報を抽出しようとしています。

//YES: We got a match.

2 つのグループを定義する情報を抽出したい

  • //との間のすべて:
  • 残りはすべて後ろに:

パターンは正しく一致しますが、グループを抽出できません。

String example = "//YES: We got a match.";
String COMMENT_PATTERN = "//(\\w+):(.*)";
Pattern pattern = Pattern.compile(COMMENT_PATTERN);

example.matches(COMMENT_PATTERN);            // true
Matcher matcher = pattern.matcher(example);
matcher.group(1);                             // raises an exception

名前付きグループでも試しました:

String COMMENT_PATTERN = "//(?<init>\\w+):(?<rest>.*)";
...
matcher.group("init");                        // raises an exception

パターンが指定されたグループを抽出できないのはなぜですか?

4

1 に答える 1

6

グループを抽出する前に、 または のいずれfind()かを呼び出して、一致プロセスを実行する必要があります。のmatches()matcher

example.matches(COMMENT_PATTERN);

独自の内部 Matcher を作成し、Matcher を呼び出しmatches()てから破棄します。これは、

Pattern.compile(COMMENT_PATTERN).matcher(example).matches()
于 2013-11-03T20:15:00.563 に答える