我有一个类似于“2015年9月22日”的日期,但有时候它就像其中任何一个:
"9/22/2015 1"
"9/22/2015 ee"
所以我用像这样的regrex检查Java
Pattern patt = Pattern.compile("([0-9]{1,2})/([0-9]{1,2})/([0-9]{4})");
if (patt.matcher(start).find()) {
System.out.println("match");
}
但这些“9/22/2015 1”,“2015年9月22日ee”也匹配?而我想要做的只是检查“9/22/2015”,然后在那之后的任何事情摆脱,无论我怎么能这样做?
我也试过Pattern patt = Pattern.compile("([0-9]{1,2})/([0-9]{1,2})/([0-9]{4})");
,但“9/22/2015 1”,“2015年9月22日ee”也实现了
由于
答案 0 :(得分:0)
使用matches()
代替find()
Pattern patt = Pattern.compile("([0-9]{1,2})/([0-9]{1,2})/([0-9]{4})");
if (patt.matcher(start).matches()) {
System.out.println("match");
}
matches()
将尝试匹配完整字符串find()
将扫描字符串,直到找到一个匹配项答案 1 :(得分:0)
使用此正则表达式"^([0-9]{1,2})/([0-9]{1,2})/([0-9]{4})$"
它应该与.find()
答案 2 :(得分:0)
我相信您希望使用Matcher(以及match.group()
专门)来提取捕获的群组:
String start = "\"9/22/2015 1\"";
Pattern patt = Pattern.compile("([0-9]{1,2})/([0-9]{1,2})/([0-9]{4})");
Matcher match = patt.matcher(start);
if (match.find()) {
System.out.println(match.group()); // prints: 9/22/2015
}
答案 3 :(得分:0)
如果您需要在日期之后没有任何内容,请告诉regexp在您的日期之后有一个新行\ n或行尾$,或者可能是一些额外的空格。检查\ n是否有多行,$是多行,如果是1行/字符串。实际上你告诉regexp找到看起来像日期格式的字符串。它发现了。你没有告诉regexp那之后可以或什么不可能。