代码之家  ›  专栏  ›  技术社区  ›  Ernelli

JavaReX基本用法问题

  •  1
  • Ernelli  · 技术社区  · 14 年前

    以下代码有效:

    String str= "test with foo hoo";
    Pattern pattern = Pattern.compile("foo");
    Matcher matcher = pattern.matcher(str);
    
    if(matcher.find()) { ... }
    

    但这个例子并没有:

    if(Pattern.matches("foo", str)) { ... }
    

    这两个版本都没有:

    if(str.matches("foo")) { ... }
    

    在真正的代码中,str是一个包含多行的文本块,如果matcher对它的处理方式不同,那么在真正的代码中,replace将用于替换一个文本字符串。

    不管怎样,奇怪的是,它在第一个版本中工作,但在其他两个版本中不工作。

    编辑

    好吧,我知道第一个例子中的行为是一样的,如果 if(matcher.matches()) { ... } 使用而不是 matcher.find . 我仍然不能使它为多行输入工作,但我坚持 Pattern.compile / Pattern.matcher 解决方案。

    2 回复  |  直到 14 年前
        1
  •  3
  •   Mark Byers    14 年前

    你最后几个例子失败是因为 matches 向正则表达式中添加隐式开始和结束锚定。换句话说,它必须与整个字符串完全匹配,而不是部分匹配。

    您可以使用 .*foo.* 相反。使用 Matcher.find 不过,这是一个更灵活的解决方案,所以我建议您坚持使用它。

        2
  •  1
  •   Community pid    7 年前

    在Java中, String.matches 代表参加 Pattern.matches 依次委托给 Matcher.matches ,它检查regex 匹配整个字符串 .

    java.util.regex.Matcher API :

    创建后,Matcher可用于执行三种不同的匹配操作:

    • 这个 matches 方法尝试匹配 整个输入序列 与模式背道而驰。
    • 这个 lookingAt 方法尝试根据模式匹配输入序列,从开头开始。
    • 这个 find 方法扫描输入序列,查找与模式匹配的下一个子序列。

    查找子字符串是否匹配 模式 你可以:

    • Matcher.find() 这个 pattern 在字符串中
    • 检查整个字符串 比赛 .*pattern.*

    相关问题

    matches() 匹配 整体 字符串:

    hitEnd() 部分匹配:

    多行与单线/ Pattern.DOTALL 模式: