1
(W[AY]|C[AO])(\\s+\\d{5})

したがって、これは現在、WまたはCで始まり、その後に郵便番号が続く状態を解析します。ただし、例WA 98121 CA 56679のように、それらすべてを1つのグループとして返​​します。グループ1はWA 98121を返し、グループ2はCA56679を返します。

これを修正して、group1 WA group2 98121 group3 CAgroup456679で取得するにはどうすればよいですか。

4

1 に答える 1

5

通常、検索「フレーズ」のすべての部分を 1 回の一致でキャプチャし、グループを使用してフレーズの部分を分割し、一致を処理してから、次のフレーズを再度一致させます。したがって、このアプローチを使用してコーディングする方法を示すことで、質問を回避します。

グループを適切に照合して使用する方法を示す実行可能なコードを次に示します。

// Regex to match a "state zip" sequence, and capture each part in its own group
String regex = "(W[AY]|C[AO])\\s+(\\d{5})";

// Some sample input
String input = "blah blah WA 98121 blah blah CA 56679 blah blah";

Matcher matcher = Pattern.compile(regex).getMatcher(input);
while (matcher.find()) { // move to next match, if one exists
    String state = matcher.group(1);
    String zip = matcher.group(2);
    // Work with state and zip values
    System.out.println("State = " + state + ", zip = " + zip);
}

出力:

State = WA, zip = 98121
State = CA, zip = 56679


キャプチャされた正規表現グループには から番号が付けられていることに注意してください1
参考までに、グループ0は試合全体です。

于 2012-08-27T00:35:03.937 に答える