Java 正则表达式中的 matchs() 和 find() 之间的区别

2022-08-31 05:13:36

我试图理解匹配()find()之间的区别。

根据Javadoc,(根据我的理解),即使它找到了它正在寻找的东西,也会搜索整个字符串,并且当它找到它正在寻找的东西时会停止。matches()find()

如果这个假设是正确的,我看不到你什么时候想用代替,除非你想计算它找到的匹配项的数量。matches()find()

在我看来,String类应该具有而不是作为内置方法。find()matches()

所以总结一下:

  1. 我的假设是否正确?
  2. 什么时候使用而不是有用?matches()find()

答案 1

matches尝试将表达式与整个字符串进行匹配,并在模式的开头和结尾隐式添加 a,这意味着它不会查找子字符串。因此,此代码的输出:^$

public static void main(String[] args) throws ParseException {
    Pattern p = Pattern.compile("\\d\\d\\d");
    Matcher m = p.matcher("a123b");
    System.out.println(m.find());
    System.out.println(m.matches());

    p = Pattern.compile("^\\d\\d\\d$");
    m = p.matcher("123");
    System.out.println(m.find());
    System.out.println(m.matches());
}

/* output:
true
false
true
true
*/

123是的子字符串,因此该方法输出 true。 只有“看到”,这与不相同,因此输出错误。a123bfind()matches()a123b123


答案 2

matches如果整个字符串与给定模式匹配,则返回 true。 尝试查找与模式匹配的子字符串。find