为什么这个正则表达式不起作用?

时间:2016-11-08 03:52:14

标签: java regex

我有方法,它接受一个日期作为字符串,我的目标是找出月份类型为数字或字符串如01.02 ....或jan,feb所以我需要比较这个月值与正则表达式但是不幸的是,如果月份字段包含数值,那么 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";
    }
}

3 个答案:

答案 0 :(得分:2)

如果第一个数字为零,您的正则表达式不会匹配两位数的数字......就像您的输入一样。你可能应该以不同的方式分支正则表达式^(0 [1-9] + | 1 [0-2])$,与你显示的正则表达式不同,排除零和不可能的月份如13。

答案 1 :(得分:0)

模式错误。这应该有效:

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

"^(0|[1-9][0-9]*)$"扩展为"^0$""^[1-9][0-9]*$",因此它会匹配单个" 0",但不会以" 0"开头。

答案 2 :(得分:0)

对于数月,您可以使用以下regx

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

在正则表达式模式下将检查单个或双位数的蛾,例如1或01是有效月份Jan

^(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);