删除正则表达式后的所有字符 - Java

时间:2015-07-29 16:10:46

标签: java regex string

我有一个类似于“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”也实现了

由于

4 个答案:

答案 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那之后可以或什么不可能。