2010-10-20 51 views
0

这是我使用迄今爪哇正则表达式匹配奇数文件格式:{<<"user_1">>,[<<"user_2">>,<<"user_3">>,<<"user_04">>]}

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

为了匹配(非转义)的正则表达式这样的:

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

这些都是我挣的群体:

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

为什么任何思考它没有给予多个用户?

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

+0

hmmm发布您的代码。 – 2010-10-20 23:42:45

+0

相关问题:http://stackoverflow.com/questions/458822 – strager 2010-10-20 23:59:50

回答

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 
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); 
} 
相关问题