我试图弄清楚Java解释正则表达式的方式不一致。
在程序中,我尝试使用"abc abc Toll"
匹配字符串(abc\\s?)+\\w
,但看起来它与此正则表达式不匹配,但当我尝试使用(abc\\s?)+[a-zA-Z]+
时,它的效果非常好
System.out.println("abc abc Toll".matches("(abc\\s?)+[a-zA-Z]+")); // >>> Works
System.out.println("abc abc Toll".matches("(abc\\s?)+\\w")); //>>> Doesnt work
有人可以在上面的示例中澄清我对\w
和[a-zA-Z]+
的理解。我已经知道\ w还包括数字但我在上面的例子中没有使用数字。
平台:JDK 1.8
答案 0 :(得分:1)
这不起作用:
System.out.println("abc abc Toll".matches("(abc\\s?)+\\w"));
因为您在结尾处匹配\\w
,这与单个字符匹配。但这应该有效:
System.out.println("abc abc Toll".matches("(abc\\s?)+\\w+"));
我的猜测是你错过了加号运算符,或者可能对它的工作原理有些困惑。正则表达式中的+
运算符匹配一个或多个或之前的任何内容。
在这里演示:
答案 1 :(得分:0)
\ w相当于[A-Za-z0-9_]。在你的情况下,[A-Za-z0-9 _] +等于\ w +。所以一旦你添加了' +'在\ w之后,它会起作用。
答案 2 :(得分:0)