[英]How to split this string using Java Regular Expressions
我想分割字符串
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);
}
我在這里做錯了什么?
謝謝
這部分:
\\[.+\\]
匹配第一個[
, .+
然后吞噬整個字符串(如果字符串中沒有換行符),然后\\\\]
將匹配最后一個]
。
你需要做的.+
通過放置一個不情願?
之后:
Pattern pattern = Pattern.compile("\\[.+?\\]+?,?\\s*");
而且不是\\\\]+?
只是\\\\]
嗎?
錯誤是您正在貪婪地進行匹配。 您可以將其更改為非貪婪匹配:
Pattern.compile("\\[.+?\\],?\\s*")
^
在http://gskinner.com/RegExr/?2sa45上有一個在線正則表達式測試器,當您嘗試了解正則表達式以及如何將其應用於給定輸入時,它將為您提供很多幫助。
使用否定字符類來匹配方括號會更好嗎? \\ [((ww + \\ s)+ \\ w + [^ \\]] \\]
您還會看到一個很好的示例,使用否定的字符類在內部如何工作(不回溯)?
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.