2010-10-07 94 views
1

我想分割如何使用Java正则表达式

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); 
} 

我在做什么错在这里?

谢谢

回答

5

这一部分:

\\[.+\\] 

匹配的第一个[,则.+然后吃掉整个字符串(如果没有换行符在字符串中),然后\\]将匹配最后]

你需要让.+不愿通过放置后,它?

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

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

+0

我做出了] +?部分不愿意,但不知道必须使+。也不愿意。谢谢 – 2010-10-07 11:41:11

+0

@阿伦,不客气。 – 2010-10-07 11:43:50

+0

巴特的权利,根本不应该有关于'''后的量词,更不用说一个不情愿的。 – 2010-10-07 21:48:20

4

错误是你匹配greedily。你可以把它改成一个非贪婪匹配:

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

有在http://gskinner.com/RegExr/?2sa45网上正则表达式测试仪,这将帮助你很多,当你试着去了解正则表达式以及它们如何应用到给定的输入。