2013-03-04 106 views
0

我有以下的Java代碼:爲什麼這個Java正則表達式不匹配我的字符串?

String data = "MaxL-450"; 

if(!data.matches("MaxL\\-*")) 
    throw new IllegalArgumentException("Did not match."); 

當我執行它時,拋出異常,因爲很明顯的正則表達式我data字符串不匹配。我的正則表達式有什麼問題,或者其他東西在這裏?提前致謝。

+1

我不知道爲什麼大家都在這裏使用\\。 – 2013-03-04 17:43:08

+0

感謝您的建議@DaveNewton - 你會用什麼來代替\\? – IAmYourFaja 2013-03-04 17:44:35

+0

一個斜線會轉義下一個字符(用於正則表達式),另一個斜線轉義斜線(用於Java)。 – Zutty 2013-03-04 17:44:58

回答

5

*表示零次或多次出現前一個字符。你想要像"MaxL-[0-9]*"之類的東西,假設你想在短劃線之後匹配一個數字。可以使用"MaxL-\\d*"。請注意,您需要在Java中使用兩個斜線,因爲您需要自行轉義斜線。就我個人而言,我喜歡在Java中使用顯式字符類(即[0-9]),因爲它更容易閱讀,因爲您的正則表達式不可避免地變得更長和更復雜。

編輯另外,正如戴夫牛頓指出的那樣,破折號前面的逃逸斜槓並不是必須的,因爲破折號不在字符類內。

+2

你可以使用'\ d'而不是'[0-9]'。 – Crozin 2013-03-04 17:42:04

+0

Thanks @Zutty(+1) - MaxL \\ - \ d +'會匹配1次出現的任何數字嗎?當我使用它,我得到一個編譯器錯誤... – IAmYourFaja 2013-03-04 17:42:43

+0

是的,這將工作,如你所描述的。編輯:哎呀!見下文。 – Zutty 2013-03-04 17:43:28

1

如果你正在尋找的連字符後的任何字符:

if(!data.matches("MaxL\\-.*")) 
    throw new IllegalArgumentException("Did not match."); 
相關問題