我有以下的Java代碼:爲什麼這個Java正則表達式不匹配我的字符串?
String data = "MaxL-450";
if(!data.matches("MaxL\\-*"))
throw new IllegalArgumentException("Did not match.");
當我執行它時,拋出異常,因爲很明顯的正則表達式我data
字符串不匹配。我的正則表達式有什麼問題,或者其他東西在這裏?提前致謝。
我有以下的Java代碼:爲什麼這個Java正則表達式不匹配我的字符串?
String data = "MaxL-450";
if(!data.matches("MaxL\\-*"))
throw new IllegalArgumentException("Did not match.");
當我執行它時,拋出異常,因爲很明顯的正則表達式我data
字符串不匹配。我的正則表達式有什麼問題,或者其他東西在這裏?提前致謝。
*
表示零次或多次出現前一個字符。你想要像"MaxL-[0-9]*"
之類的東西,假設你想在短劃線之後匹配一個數字。可以使用"MaxL-\\d*"
。請注意,您需要在Java中使用兩個斜線,因爲您需要自行轉義斜線。就我個人而言,我喜歡在Java中使用顯式字符類(即[0-9]
),因爲它更容易閱讀,因爲您的正則表達式不可避免地變得更長和更復雜。
編輯另外,正如戴夫牛頓指出的那樣,破折號前面的逃逸斜槓並不是必須的,因爲破折號不在字符類內。
你可以使用'\ d'而不是'[0-9]'。 – Crozin 2013-03-04 17:42:04
Thanks @Zutty(+1) - MaxL \\ - \ d +'會匹配1次出現的任何數字嗎?當我使用它,我得到一個編譯器錯誤... – IAmYourFaja 2013-03-04 17:42:43
是的,這將工作,如你所描述的。編輯:哎呀!見下文。 – Zutty 2013-03-04 17:43:28
如果你正在尋找的連字符後的任何字符:
if(!data.matches("MaxL\\-.*"))
throw new IllegalArgumentException("Did not match.");
我不知道爲什麼大家都在這裏使用\\。 – 2013-03-04 17:43:08
感謝您的建議@DaveNewton - 你會用什麼來代替\\? – IAmYourFaja 2013-03-04 17:44:35
一個斜線會轉義下一個字符(用於正則表達式),另一個斜線轉義斜線(用於Java)。 – Zutty 2013-03-04 17:44:58