Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/17.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java String.contains查找子字符串,但找不到Pattern.matches?_Java_Regex_String_Contains - Fatal编程技术网

Java String.contains查找子字符串,但找不到Pattern.matches?

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("

在我的一个try/catch块中,我捕获了一个异常
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嵌入式标志表达式”吗?我的互联网连接有问题,我正在更新答案,但可能需要时间谢谢!在我的子字符串之前有一些换行符!