2016-11-08 118 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); 
相关问题