Java Regex:字符串文字中的单词边界匹配器

Ked*_*ade 0 java regex word-boundary

Java代码:

import java.util.regex.*;

class Test {
    public static void main(String[] args) {
        String r = "\\bdog\\b";
        Pattern p = Pattern.compile(r);
        String text = "abc dog def";
        System.out.println(p.matcher(text).matches());
    } 
}
Run Code Online (Sandbox Code Playgroud)

等效Perl代码:

$x = "abc dog def";
if ($x =~ /\bdog\b/) {
    print "matches";
}
Run Code Online (Sandbox Code Playgroud)

Perl代码按预期运行,并打印字符串"abc dog def"与给定的正则表达式匹配.另一方面,Java代码表示该字符串与正则表达式不匹配.我在犯一些愚蠢的错误吗?有趣的是,如果我输入cmd行上的正则表达式(不是字符串文字),如Oracle Docs所示,那么它可以正常工作.

Ray*_*oal 5

不同之处在于matches,Java意味着匹配整个字符串,而不仅仅是Perl中的一部分.就好像有一个隐含的^$存在的.

用Java来了解它是很方便的

  • find 在字符串中的任何地方查找匹配项(并且可以迭代)
  • lookingAt 在字符串的开头查找匹配项
  • matches 想要匹配整个字符串

另见