为什么我必须在Java正则表达式中指定整个字符串?
假设,我有一个字符串:
String str = "some strange string with searched symbol";
我想在其中搜索一些符号,假设它将是.因此,我们有以下几点:"string"
str.matches("string"); //false
str.matches(".*string.*"); //true
那么,如标题所述,为什么我必须在Java正则表达式中指定整个字符串?
Java文档说:
公共布尔匹配(字符串正则表达式)
告知此字符串是否与给定的正则表达式匹配。
它没有说
指示整个字符串是否与给定的正则表达式匹配。
例如,在它将是:php
$str = "some strange string with searched symbol";
var_dump(preg_match('/string/', $str)); // int(1)
var_dump(preg_match('/.*string.*/', $str)); //int(1)
因此,两个正则表达式都将是 。
我认为这是正确的,因为如果我想测试整个字符串,我会做的true
str.matches("^string$");
附言:是的,我知道就是搜索子字符串,更简单快捷就会用到或者.我的问题只涉及Java正则表达式。str.indexOf("string")
str.contains("string")
更新:正如@ChrisJester-Young(和@GyroGearless)所述,如果您想搜索主题字符串的一部分,其中一个解决方案是使用如下方法:regex
find()
String str = "some strange string with searched symbol";
Matcher m = Pattern.compile("string").matcher(str);
System.out.println(m.find()); //true