1

{"aaa","bbb", "ccc"}のような文字列を解析したいaaa,bbb,ccc。Javaの正規表現でどうすればいいですか? 以下のようなコードを書いてみました。

String s = "{\"aaa\",\"bbb\", \"ccc\"}";
Pattern pattern = Pattern.compile("\\{\\\"([\\w]*)\\\"([\\s]*,[\\s]*\\\"([\\w]*)\\\")*}");
Matcher matcher = pattern.matcher(s);
if(matcher.find())      {
    StringBuilder sb = new StringBuilder();
    int cnt = matcher.groupCount();
    for(int i = 0; i < cnt; ++i)        {
        System.out.println(matcher.group(i));
    }
}

しかし、出力は

{"aaa","bbb", "ccc"}
aaa
, "ccc"

これはグループと貪欲な試合に関するものだと感じていますが、書き方がわかりません。誰か助けてもらえますか?どうもありがとう!

PSのような方法でそれを行う方法を知っていString.replaceます。正規表現で実行できるか知りたいだけです。ありがとう

すべての回答と時間に感謝しますが、最初に欲しいのは、Java で正規表現を使用するデリゲート ソリューション、特に group inregexです。group解き方を知りたいです。

4

3 に答える 3

1

正規表現のみのマッチング:非常に複雑

正規表現パターン:(?:\{(?=(?:"[^"]+"(?:, ?|(?=\})))*\})|(?!^)\G, ?)"([^"]+)"
注:グローバル修飾子g必要であり、エスケープが必要であり、無制限の数のトークンで機能します

ここでデモの説明:http://regex101.com/r/iE9gS1

于 2013-03-17T10:50:54.517 に答える
1

これを試して。

import java.util.*;
public class Main{

    public static void main(String[] args){
        String s = "{\"aaa\",\"bbb\", \"ccc\"}";
        s = s.substring(1,s.length() -1 );
        s = s.replace("\"","");
        String[] sa = s.split(", ?");
        for (int i = 0; i < sa.length; i++)
            System.out.println(sa[i]);
    }   
}
于 2013-03-17T10:24:55.743 に答える
1

このサンプルコードを試してください:

public class RegexTester {
public static void main(String[] args) throws Exception {
    String data = "{\"aaa\",\"bbb\", \"ccc\"}";

    String modifiedData = data.replaceAll("\\{|\"|\\}", "");

    System.out.println("Modified data : " + modifiedData);
}

正規表現を使用して、このパターンを試してください:

Pattern pattern = Pattern.compile("\\{\"(.+?)\"(,?)\"(.+?)\"(,?)\\s*\"(.+?)\"");
    Matcher matcher = pattern.matcher(data);
    System.out.println("Started");
    while (matcher.find()) {

        System.out.print(matcher.group(1));
        System.out.print(matcher.group(2));
        System.out.print(matcher.group(3));
        System.out.print(matcher.group(4));
        System.out.print(matcher.group(5));
    }

これで問題が解決することを願っています。

于 2013-03-17T10:26:31.317 に答える