[英]String.contains finds a substring but not Pattern.matches?
在我的一個try / catch塊中,我捕獲了一個異常e
,這個:
e.toString().contains("this is a substring")
返回true
而
Pattern.matches(".*this is a substring.*", e.toString())
返回false
為什么會這樣? 包括.*
作為正則表達式模式的前綴和后綴應該基本上使這兩個函數做同樣的事情嗎?
如果輸入字符串包含換行符號,則.matches()
中的.*
是不夠的,需要完整的字符串匹配。
因此,您需要一個DOTALL修飾符:
Pattern.matches("(?s).*this is a substring.*", e.toString())
^^^^
請參閱Java正則表達式參考 :
在dotall模式中,表達式
.
匹配任何字符,包括行終止符。 默認情況下,此表達式與行終止符不匹配。也可以通過嵌入式標志表達式
(?s)
啟用Dotall模式。 (s
是“單行”模式的助記符,這是在Perl中調用的。)
注意 :如果需要檢查較長字符串中是否存在文字子字符串,則.contains()
方法應該更快。 或者,如果你需要區分大小寫的contains
,你也可以檢查StringUtils.containsIgnoreCase
。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.