这是我目前使用的(非转义)正则表达式
\{<<"(\w+)">>, \[(<<"(\w+)">>,?)+\]\}.
要匹配:
{<<"user_1">>, [<<"user_2">>,<<"user_3">>,<<"user_04">>]}.
这些是我得到的小组:
1: user_1
2: <<"user_04">>
3: user_04
有关为何没有给多个用户的原因?
如果您想知道文件格式是基于erlang的。
答案 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);
}