如何使用Java正则表达式拆分此字符串

时间:2010-10-07 11:31:32

标签: java regex

我想拆分字符串

String fields = "name[Employee Name], employeeno[Employee No], dob[Date of Birth], joindate[Date of Joining]";

name
employeeno
dob
joindate

我为此编写了以下java代码,但它只打印了其他匹配项不打印的名称。

String fields = "name[Employee Name], employeeno[Employee No], dob[Date of Birth], joindate[Date of Joining]";

Pattern pattern = Pattern.compile("\\[.+\\]+?,?\\s*" );

String[] split = pattern.split(fields);
for (String string : split) {
    System.out.println(string);
}

我在这里做错了什么?

谢谢

4 个答案:

答案 0 :(得分:5)

这部分:

\\[.+\\]

匹配第一个[.+然后吞噬整个字符串(如果字符串中没有换行符),那么\\]将匹配最后一个] }。

您需要在.+之后放置?

Pattern pattern = Pattern.compile("\\[.+?\\]+?,?\\s*");

不应该\\]+?只是\\]

答案 1 :(得分:4)

错误是您匹配greedily。您可以将其更改为非贪婪的匹配:

Pattern.compile("\\[.+?\\],?\\s*")
                      ^

答案 2 :(得分:1)

http://gskinner.com/RegExr/?2sa45有一个在线正则表达式测试程序,当您尝试理解正则表达式以及它们如何应用于给定输入时,它将对您有所帮助。

答案 3 :(得分:0)

最好使用Negated Character Classes来匹配方括号吗? \ [(\ W + \ S)+ \ W + [^ \]] \]

你还可以看到一个很好的例子how does using a negated character class work internally (without backtracking)?