2012-04-18 210 views
2

我想匹配一個字符串,從一個點開始使用java的匹配方法。爲什麼這不起作用:匹配使用匹配的字符串開頭的點?

".why?".matches("\\.*"); 

當我使用一個單一的斜槓,我越來越爲無效轉義序列錯誤。 在此先感謝

回答

7

"\\.*"匹配由零個或多個零組成的字符串'.' s。它匹配以下(引用)字符串:

"" 
"." 
".." 
"..." 

(等)

你想:"\\..*"代替。需要注意的是.在默認情況下不匹配換行符,所以它不會匹配以下字符串:

".Why? \n Not!" 

對於這樣的字符串匹配,則需要啓用DOT-ALL:"(?s)\\..*"

+0

現在,它的工作原理,謝謝,但爲什麼我需要第二個點 – mjekov 2012-04-18 19:27:43

+0

@Colin,不,額外的反斜槓只在那裏,因爲它被放置在Java中的字符串文字中。所以字符串模式''\\。「'相當於正則表達式模式:'\ .'(注意雙引號!) – 2012-04-18 19:29:11

+0

可能值得說明的是你的意思是\\。*對於「。」,「..」,「...」,...而\\ .. *對於「。」,「.anything」,「.etc」,... \爲真。存在 。第二 。作爲任何字符,並*無限重複任何字符規則。 – 2012-04-18 19:31:16

1

剛試過它自己。這適用於我

System.out.println(".why?".matches("^\\..*")); 

你只是缺少一個「。」匹配「爲什麼?」部分。