2010-10-07 88 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網上正則表達式測試儀,這將幫助你很多,當你試着去了解正則表達式以及它們如何應用到給定的輸入。