我有方法,它接受一个日期作为字符串,我的目标是找出月份类型为数字或字符串如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";
}
}
答案 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);