(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で取得するにはどうすればよいですか。
(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で取得するにはどうすればよいですか。
通常、検索「フレーズ」のすべての部分を 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
は試合全体です。