假设,我有一个字符串:
String str = "some strange string with searched symbol";
Run Code Online (Sandbox Code Playgroud)
我想在其中搜索一些符号,假设它会是"string"
.所以我们有以下内容:
str.matches("string"); //false
str.matches(".*string.*"); //true
Run Code Online (Sandbox Code Playgroud)
那么,正如标题中所述,为什么我必须在Java正则表达式中指定整个字符串?
Java文档说:
public boolean matches(String regex)
判断此字符串是否与给定的正则表达式匹配.
它没有说
判断整个字符串是否与给定的正则表达式匹配.
例如,php
它将是:
$str = "some strange string with searched symbol";
var_dump(preg_match('/string/', $str)); // int(1)
var_dump(preg_match('/.*string.*/', $str)); //int(1)
Run Code Online (Sandbox Code Playgroud)
所以,两个正则表达式都将是true
.
我认为这是正确的,因为如果我想测试整个字符串,我会这样做str.matches("^string$");
PS:是的,我知道这是搜索子字符串,更简单,更快将使用str.indexOf("string")
或str.contains("string")
.我的问题只涉及Java正则表达式.
更新:如@ 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
Run Code Online (Sandbox Code Playgroud)
Chr*_*ung 17
matches
始终匹配整个输入字符串.如果要允许子字符串匹配,请使用find
.