我想拆分字符串
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);
}
我在这里做错了什么?
谢谢
答案 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)?