String.contains找到一个子字符串但不是Pattern.matches?

Kev*_*Lin 3 java regex string contains

在我的一个try/catch块中,我捕获了一个异常e,这个:

e.toString().contains("this is a substring") 回报 true

Pattern.matches(".*this is a substring.*", e.toString()) 回报 false

为什么会这样?包括.*作为正则表达式模式的前缀和后缀应该基本上使这两个函数做同样的事情吗?

Wik*_*żew 6

如果您的输入字符串包含换行符号,.*那么还不够.matches(),需要完整的字符串匹配.

因此,您需要一个DOTALL修饰符:

Pattern.matches("(?s).*this is a substring.*", e.toString())
                 ^^^^ 
Run Code Online (Sandbox Code Playgroud)

请参阅Java正则表达式参考:

在dotall模式下,表达式.匹配任何字符,包括行终止符.默认情况下,此表达式与行终止符不匹配.

也可以通过嵌入的标志表达式(?s)启用Dotall模式.(这s是"单行"模式的助记符,这是在Perl中调用的.)

注意:如果您需要检查较长字符串中是否存在文字子字符串,则.contains()方法应该更快.或者,如果您需要不区分大小写contains,也可以检查StringUtils.containsIgnoreCase.