0
リスト内の要素の位置と長さを取得したい。したがって、私は正規のグループ分けを使用したいと思います。なぜなら、一致するグループのオフセットと長さを得ることができるからです。要素はカンマで区切られ、任意の種類の文字を含むことができます。ここでは例です:Java正規表現のグループ化を使ったスキャンリスト
(1234、A {}、 "foo" という)
ここでは、私が実行しようとしましたものです:
String textToMatch = "(1234, A{}, \"foo\")";
Pattern p = Pattern.compile("\\(\\s*([^,]+?)(?:\\s*,\\s*([^,]+?)\\s*)*\\)");
Matcher m = p.matcher(textToMatch);
if (m.find()) {
for (int i = 1; i <= m.groupCount(); i++) {
System.out.println(m.group(i));
}
}
残念ながら、これは動作しません。最初と最後の要素だけを取得しますが、その間の要素は取得しません。
1234
"foo"
私が代わりにそれが動作星演算子を使用して、同じ正規表現3回を使用する場合:ここで私は上記のコードで取得する出力です。私はグループを反復することで間違ったことをすると思います。何か案は?
私は非常によくJavaの正規表現を知っているが、しないでください:あなたは1〜Iを行っている何らかの理由があるより少なくより等しいgroupCount()、代わりに0 groupCount未満に( )? – mfrankli
@mfrankli:グループは1ベースであり、0ベースではありません。 (これはほぼすべての正規表現エンジンで標準です)。Javaでは、グループ0は一致する部分文字列全体と一致する疑似グループです。 – ruakh