2017-04-23 112 views
-2

我想弄清楚Java解釋正則表達式的方式不一致。 w和[a-zA-Z]之間的Java正則表達式差異

在節目中,我嘗試使用(abc\\s?)+\\w匹配字符串"abc abc Toll"但它看起來像它不匹配這個正則表達式,但是當我嘗試(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

回答

1

這不起作用:

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

因爲你匹配\\w末,其匹配字字符。但是,這應該工作:

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

我的猜測是,要麼你錯過了加運算或可能有關於它如何工作的一些混亂。正則表達式中的+運算符與之前的一個或多個運算符匹配。

演示這裏:

Rextester

+0

感謝哥們,我認爲\ w被識別爲整個單詞,但是它的字中有字 – Xinus

0

\ w是等同於[A-ZA-Z0-9_]。在你的情況下,[A-Za-z0-9 _] +等於\ w +。所以一旦你在\ w後面添加'+',它就會起作用。

0

檢查每個正則表達式的圖形表示:

(abc\\s?)+\\w 

enter image description here

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

enter image description here

​​

enter image description here