Java正则表达式匹配奇数文件格式:{<<“user_1”>>,[<<“user_2”>&gt ;,<<“user_3”>>,<< “user_04” >>]}

时间:2010-10-20 23:34:18

标签: java regex

这是我目前使用的(非转义)正则表达式

\{<<"(\w+)">>, \[(<<"(\w+)">>,?)+\]\}.

要匹配:

{<<"user_1">>, [<<"user_2">>,<<"user_3">>,<<"user_04">>]}.

这些是我得到的小组:

1: user_1
2: <<"user_04">>
3: user_04

有关为何没有给多个用户的原因?

如果您想知道文件格式是基于erlang的。

2 个答案:

答案 0 :(得分:2)

模式的组计数固定为3.组在最后匹配的位置捕获文本。最后两个(嵌套)组匹配三次以消耗输入;你看到他们最后一次匹配的地方,第四个用户。

你想在这做什么?如果您只想匹配<< / >>分隔符的内容,可以尝试以下内容:

String text = "{<<\"user_1\">>, [<<\"user_2\">>,<<\"user_3\">>,<<\"user_04\">>]}";
String regex = "<<\"(\\w+)\">>";
Pattern p = Pattern.compile(regex);
Matcher m = p.matcher(text);
while (m.find()) {
  System.out.format("found: %s\n", m.group(1));
}

这会生成输出:

found: user_1
found: user_2
found: user_3
found: user_04

答案 1 :(得分:0)

我无法让正则表达式以OP想要的方式工作,所以我提供了这个可爱的东西。

String in =  "{<<\"user_1\">>, [<<\"user_2\">>,<<\"user_3\">>,<<\"user_04\">>]}";
List<String> list = new ArrayList<String>();

list.addAll(Arrays.asList(in.replaceAll("[\\s\\{\\}\\[\\[\\]<>\"]", "").split(",")));

for (String s : list) {
    System.out.println(s);
}