为什么没有一个正则表达式模式结束于"。"使用单词边界时产生匹配?

时间:2012-06-01 00:12:57

标签: java regex quote

在以下Java代码中:

public static void main(String[] args) {
        String largeText = "abc myphrase. def";
        String phrase = "myphrase.";
        Pattern myPattern = Pattern.compile("\\b"+Pattern.quote(phrase)+"\\b");
        System.out.println("Pattern: "+myPattern);
        Matcher myMatcher = myPattern.matcher( largeText );
        boolean found = false;
        while(myMatcher.find()) {
          System.out.println("Found: "+myMatcher.group());
          found = true;
        }
        if(!found){
            System.out.println("Not found!");
        }
}

我得到了这个输出:

Pattern: \b\Qmyphrase.\E\b
Not found!

拜托,有人可以解释一下为什么上述模式不会产生匹配吗?如果我使用“myphrase”而不是“myphrase”,我确实有匹配。在模式中。

感谢您的帮助。

3 个答案:

答案 0 :(得分:4)

在单词字符和非单词字符之间出现. A边界后没有边界。由于." "(空格)都是非单词字符,因此它们之间没有边界。

如果您在模式中使用“myphase”,则会得到匹配项,因为字符e.之间存在边界。

答案 1 :(得分:1)

它不匹配,因为点(.被认为是"字"字符,所以赢了是一个文字点之后的字边界(当下一个字符是空格时)。

仅供参考,"字"字符(具有自己的正则表达式\w)等同于字符类[a-zA-Z0-9_]

答案 2 :(得分:0)

也许您正在尝试使用\ s而不是\ b?