在以下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”,我确实有匹配。在模式中。
感谢您的帮助。
答案 0 :(得分:4)
在单词字符和非单词字符之间出现.
A边界后没有边界。由于.
和" "
(空格)都是非单词字符,因此它们之间没有边界。
如果您在模式中使用“myphase”,则会得到匹配项,因为字符e
和.
之间存在边界。
答案 1 :(得分:1)
它不匹配,因为点(.
)不被认为是"字"字符,所以赢了是一个文字点之后的字边界(当下一个字符是空格时)。
仅供参考,"字"字符(具有自己的正则表达式\w
)等同于字符类[a-zA-Z0-9_]
答案 2 :(得分:0)
也许您正在尝试使用\ s而不是\ b?