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

标签 java regex

我试图理解 matches() 之间的区别和 find() .

根据Javadoc,(据我了解),matches() 将搜索整个字符串,即使它找到了它要查找的内容,而find() 将在找到它要查找的内容时停止。

如果这个假设是正确的,我看不到您何时想使用 matches() 而不是 find(),除非您想计算它找到的匹配项的数量。

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

总结一下:

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

最佳答案

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

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
*/

123a123b 的子字符串,因此 find() 方法输出 true。 matches() 仅“看到”a123b,它与 123 不同,因此输出 false。

关于java - Java 正则表达式中 matches() 和 find() 之间的区别,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33861628/

相关文章:

MySQL——按子字符串匹配索引排序

java - 使用 Apache POI 访问数据透视表的字段设置

java - 初始化二维java数组

java - Java 中字节数组的 Base64 和它在 PHP 中的等效

java - 如何解析具有不同键值的json对象?

javascript - 正则表达式:替换注释之间的内容

正则表达式如何匹配 dd mmm yyyy 以仅选择年份的前两位数字

java - 将 Tomcat 5.5 输出写入 Tomcat 的日志文件之一

regex - Linux从日志中获取所有时间戳

java - 如何从简单的正则表达式生成字符串?