Java String.contains查找子字符串,但找不到Pattern.matches?
在我的一个try/catch块中,我捕获了一个异常Java String.contains查找子字符串,但找不到Pattern.matches?,java,regex,string,contains,Java,Regex,String,Contains,在我的一个try/catch块中,我捕获了一个异常e,如下所示: e.toString().contains(“这是一个子字符串”)返回true 当 Pattern.matches(“.*这是一个子字符串。*”),例如toString()返回false 为什么会发生这种情况?将*作为正则表达式模式的前缀和后缀,基本上可以使这两个函数正确地执行相同的操作?如果输入字符串包含换行符,*在需要完全字符串匹配的.matches()中是不够的 因此,您需要点所有修改器: Pattern.matches("
e
,如下所示:
e.toString().contains(“这是一个子字符串”)
返回true
当
Pattern.matches(“.*这是一个子字符串。*”),例如toString()
返回false
为什么会发生这种情况?将
*
作为正则表达式模式的前缀和后缀,基本上可以使这两个函数正确地执行相同的操作?如果输入字符串包含换行符,*
在需要完全字符串匹配的.matches()
中是不够的
因此,您需要点所有修改器:
Pattern.matches("(?s).*this is a substring.*", e.toString())
^^^^
见:
在dotall模式下,表达式
匹配任何字符,包括行终止符。默认情况下,此表达式与行终止符不匹配
也可以通过嵌入式标志表达式(?s)
启用Dotall模式。(s是“单行”模式的助记符,在Perl中就是这样称呼的。)
注意:如果需要检查较长字符串中是否存在文字子字符串,则
.contains()
方法应能更快地工作。或者,如果需要不区分大小写的包含
,也可以选中。显示使用完整的e.toString()
值否,不必。字符串中是否有换行符?什么是e.toString()
?包含的
不适用于正则表达式,匹配的
显然适用。您的“这是一个子字符串”显然是一个示例值。真正的值是什么?它是否包含任何在正则表达式上下文中可能特殊的字符?谢谢您的帮助!我不知道新线符号需要单独处理!我可以建议您将其称为“DOTALL嵌入式标志表达式”吗?我的互联网连接有问题,我正在更新答案,但可能需要时间谢谢!在我的子字符串之前有一些换行符!