亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

使用正則表達式匹配多行文本

使用正則表達式匹配多行文本

汪汪一只貓 2019-07-06 16:17:12
使用正則表達式匹配多行文本我正在嘗試使用java來匹配多行文本。當我使用Pattern類的Pattern.MULTILINE修飾符,我可以匹配,但我不能這樣做。(?m).相同的模式(?m)和使用String.matches似乎不起作用。我肯定我錯過了什么,但不知道是什么。我不太擅長正則表達式。這就是我試過的String test = "User Comments: This is \t a\ta \n test \n\n message \n";String pattern1 = "User Comments: (\\W)*(\\S)*";Pattern p = Pattern.compile(pattern1, Pattern.MULTILINE);System.out.println(p.matcher(test).find());  //trueString pattern2 = "(?m)User Comments: (\\W)*(\\S)*";System.out.println(test.matches(pattern2));  //false - why?
查看完整描述

3 回答

?
三國紛爭

TA貢獻1804條經驗 獲得超7個贊

str.matches(regex) 表現得像 Pattern.matches(regex,  str),它嘗試將整個輸入序列與模式匹配并返回。

true當且僅當輸入序列與匹配器的模式匹配

鑒于matcher.find() 試圖尋找與模式匹配并返回的輸入序列的下一個子序列。

true當且僅當子序列的輸入序列與匹配器的模式相匹配。

因此,問題在于正則表達式。試試下面的方法。

String test = "User Comments: This is \t a\ta \ntest\n\n message \n";String pattern1 = "User Comments:
 [\\s\\S]*^test$[\\s\\S]*";Pattern p = Pattern.compile(pattern1, Pattern.MULTILINE);System.out.println(p.matcher(test).find()); 
  //trueString pattern2 = "(?m)User Comments: [\\s\\S]*^test$[\\s\\S]*";System.out.println(test.matches(pattern2));  //true

因此,簡而言之,(\\W)*(\\S)*第一個正則表達式中的部分將空字符串匹配為*表示零次或更多次,而真正匹配的字符串是User Comments:而不是你所期望的整根繩子。第二個失敗,因為它試圖匹配整個字符串,但它不能\\W匹配非字符[^a-zA-Z0-9_]第一個角色是T一個字。


查看完整回答
反對 回復 2019-07-06
  • 3 回答
  • 0 關注
  • 2441 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號