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

Java 为什么这个正则表达式不起作用?,java,regex,Java,Regex,我有一个方法,它接受一个日期作为字符串,我的目标是找出月份类型,如数字或字符串01.02…或1月,2月,所以我需要将这个月份值与正则表达式进行比较,但不幸的是,如果月份字段包含数字值,则匹配。find()不起作用,但为什么?提前谢谢 public static String detectMonthType(String date) { String[] parts = {}; if(date.contains("/")) { parts = date.split

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

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

该模式是错误的。这应该起作用:

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

“^(0 |[1-9][0-9]*)$”
扩展为
“^0$”
“^[1-9][0-9]*$”
,因此它将匹配单个“0”,但不能以“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);

您的输入是什么?我的输入类似于2016年11月7日。您的预期输出是什么?因为我的输入包含数字月份值,所以我在这里预期block应该为true,但不幸的是,它为false。对我来说效果很好。顺便问一下,
dateType
的意义是什么?该模式将匹配13,这是一个无效的月份。@DavidChoweller是的,你是对的。我编辑了我的答案。谢谢。效果很好