"Hello <a1> sqjsjqk <b1,b2> dsjkfjkdsf <c1,c2,c3> ffsd"
例のように、文字列内の <> 間のコンマ区切りの単語のリストの一致を見つけるために使用する正規表現があります。
中括弧の間に各単語を保持するために、キャプチャ グループを使用したいと考えています。
これが私の表現です: < (\w+) (?: ,(\w+) )* >
(読みやすくするためにスペースが追加されていますが、パターンの一部ではありません)
括弧はキャプチャ グループを(?: )
作成するためのもので、非キャプチャ グループを作成するためのものです。コマを保持したくないからです。
ここに私のテストコードがあります:
@Test
public void test() {
String patternString = "<(\\w+)(?:,(\\w+))*>";
Pattern pattern = Pattern.compile(patternString);
Matcher matcher = pattern.matcher("Hello <a1> sqjsjqk <b1,b2> dsjkfjkdsf <c1,c2,c3> ffsd");
while(matcher.find()) {
System.out.println("== Match ==");
MatchResult matchResult = matcher.toMatchResult();
for(int i = 0; i < matchResult.groupCount(); i++) {
System.out.println(" " + matchResult.group(i + 1));
}
}
}
これは、生成される出力です。
== Match ==
a1
null
== Match ==
b1
b2
== Match ==
c1
c3
そして、ここに私が欲しかったものがあります:
== Match ==
a1
== Match ==
b1
b2
== Match ==
c1
c2
c3
このことから、式のキャプチャ グループの数とまったく同じ数のグループがあることがわかりますが、これは私が望むものではありません。 \w+
単一の RegExp で必要なものを取得する機会はありますか、または 、 などで仕事を終了する必要がありsplit(",")
ますtrim()
...