\ w和[a-zA-Z]之间的Java正则表达式差异

时间:2017-04-23 08:35:48

标签: java regex

我试图弄清楚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

3 个答案:

答案 0 :(得分:1)

这不起作用:

System.out.println("abc abc Toll".matches("(abc\\s?)+\\w"));

因为您在结尾处匹配\\w,这与单个字符匹配。但这应该有效:

System.out.println("abc abc Toll".matches("(abc\\s?)+\\w+"));

我的猜测是你错过了加号运算符,或者可能对它的工作原理有些困惑。正则表达式中的+运算符匹配一个或多个或之前的任何内容。

在这里演示:

Rextester

答案 1 :(得分:0)

\ w相当于[A-Za-z0-9_]。在你的情况下,[A-Za-z0-9 _] +等于\ w +。所以一旦你添加了' +'在\ w之后,它会起作用。

答案 2 :(得分:0)

检查每个正则表达式的图示:

(abc\\s?)+\\w

enter image description here

(abc\\s?)+[a-zA-Z]+

enter image description here

(abc\\s?)+\\w+

enter image description here