Question:
考慮下面的片段代碼:
- String test = "User Comments: This is \t a\ta \n test \n\n message \n";
- String pattern1 = "User Comments:\\s*(.*)";
- Pattern p = Pattern.compile(pattern1);
- Matcher mth = p.matcher(test);
- if(mth.find())
- {
- System.out.printf("\t[Info] Find '%s'!\n", mth.group(1).trim());
- }
- else
- {
- System.out.printf("\t[Info] Miss!\n");
- }
也就是 Regular expression 的 "." 並不能代表 "\n" (換行), 所以只比對到第二個 'a'. 但問題是我們希望 "." 也能代表換行.
Solution:
可以參考類別 Pattern 上面的說明, 該類別有提供一個參數 DOTALL 讓你在建立物件時設定 "." 也能代表換行:
因此上面的代碼只要改:
- Pattern p = Pattern.compile(pattern1, Pattern.DOTALL);
- String pattern1 = "(?s)User Comments:\\s*(.*)";
沒有留言:
張貼留言