1

私はJAVAで正規表現に大きな問題を抱えています(3日間を費やしてください!!!)。これは私の入力文字列です:

#sfondo: [#nome: 0, #imga: 0],#111: 222, #p: [#ciccio:aaa, #caio: bbb]

この文字列を配列ツリーに解析する必要があります。次のように一致する必要があります。

group: #sfondo: [#nome: 0, #imga: 0]
group: #111: 222
group: #p: [#ciccio:aaa, #caio: bbb]

ネストされた角かっこありまたはなし

私はこれを試しました:

"#(\\w+):(.*?[^,\]\[]+.*?),?"

ただし、このグループは各要素で区切られ、括弧内も「、」で区切られます。

4

2 に答える 2

3

これを試してください:

import java.util.regex.*;

class Untitled {
  public static void main(String[] args) {
    String input = "#sfondo: [#nome: 0, #imga: 0],#111: 222, #p: [#ciccio:aaa, #caio: bbb]";
    String regex = "(#[^,\\[\\]]+(?:\\[.*?\\]+,?)?)";
    Pattern pattern = Pattern.compile(regex);
    Matcher matcher = pattern.matcher(input);

    while (matcher.find()) {
      System.out.println("group: " + matcher.group());
    }
  }
}
于 2012-06-14T08:57:45.590 に答える
0

これはあなたの例ではうまくいくようです:

    String input = "#sfondo: [#nome: 0, #imga: 0],#111: 222, #p: [#ciccio:aaa, #caio: bbb]";
    String regex = "#\\w+: (\\[[^\\]]*\\]|[^\\[]+)(,|$)";
    Pattern p = Pattern.compile(regex);
    Matcher matcher = p.matcher(input);
    List<String> matches = new ArrayList<String>();
    while (matcher.find()) {
        String group = matcher.group();
        matches.add(group.replace(",", ""));
    }

編集:
これは、ネストされた深さが1の場合にのみ機能します。正規表現で任意の深さのネストされた構造を処理する方法はありません。詳細については、この回答を参照してください。

于 2012-06-14T08:49:08.070 に答える