2016-11-08 57 views
-2

我有方法,它接受日期作爲一個字符串,我的目標是找出月份類型爲數字或字符串像01.02 ....或1月,二月,所以我需要比較這個月的價值正則表達式,但不幸的是,如果月份字段包含數值然後match.find()不起作用,但爲什麼?提前致謝爲什麼這個正則表達式不起作用?

public static String detectMonthType(String date) { 
    String[] parts = {}; 

    if(date.contains("/")) { 
     parts = date.split("/"); 
    } else { 
     parts = date.split("-"); 
    } 

    String dateType = ""; 
    String month = parts[1]; 
    String strPattern = "^(0|[1-9][0-9]*)$"; 
    Pattern pattern = Pattern.compile(strPattern); 
    Matcher match = pattern.matcher(month); 

    if(match.find()) { 
     return dateType = "numericMonth"; 
    } else { 
     return dateType = "strMonth"; 
    } 
} 
+0

什麼是你的輸入? – shmosel

+0

我的輸入是07/11/16 –

+0

您的預期輸出是什麼? – shmosel

回答

2

如果第一個數字是零,您的正則表達式不會匹配兩位數字,就像在您的輸入中一樣。你或許應該分支正則表達式作爲不同^(0 [1-9] + | 1 [0-2])$,它不象你的正則表達式顯示將排除零,也不可能像月13

+0

感謝它工作正常 –

0

模式是錯誤。這應該工作:

String strPattern = "^(0[1-9]|1[0-2])*$"; 

"^(0|[1-9][0-9]*)$"擴展到"^0$""^[1-9][0-9]*$",所以它將匹配一個「0」,而是用「0」沒有什麼啓動。

+0

該模式將匹配13,這是一個無效的月份。 –

+0

@DavidChoweller是的,你是對的。我編輯了我的答案。 – wrkwrk

0

爲數字月份,您可以使用以下至REGx

^(1[0-2]|0[1-9])$ 

下面的正則表達式模式將檢查單或雙位數蛾例如1或01是有效的月份一月

^(1[0-2]|0?[1-9])$ 

以下字符串幾個月模式:

(jan|feb|mar|apr|may|jun|jul|aug|sep|oct|nov|dec) 

而更通用的檢查短或全蛾的名字是

(Jan(uary)?|(Feb)ruary?|Mar(ch)?|Apr(il)?|May|Jun(e)?|Jul(y)?|Aug(ust)?|Sep(tember)?|Oct(ober)?|Nov(ember)?|Dec(ember)?) 

這可以作爲

Pattern pattern = Pattern.compile(strPattern,Pattern.CASE_INSENSITIVE); 
相關問題