Java Pattern匹配String的开头和结尾?

时间:2016-12-27 11:09:45

标签: java regex

我有input,如下所示: 0; expires=2016-12-27T16:52:39 我正在尝试使用PatternMatcher

来提取此日期
  private String extractDateFromOutput(String result) {
    Pattern p = Pattern.compile("(expires=)(.+?)(?=(::)|$)");
    Matcher m = p.matcher(result);
    while (m.find()) {
      System.out.println("group 1: " + m.group(1));
      System.out.println("group 2: " + m.group(2));
    }
    return result;
  }

为什么这个匹配器会找到多个组?输出如下:

group 1: expires=
group 2: 2016-12-27T17:04:39

我怎样才能从中获得第2组?

谢谢!

2 个答案:

答案 0 :(得分:3)

因为您在正则表达式中使用了多个捕获组。

Pattern p = Pattern.compile("expires=(.+?)(?=::|$)");

只需删除

周围的捕获组
  1. expires
  2. ::

答案 1 :(得分:0)

private  String extractDateFromOutput(String result) {
    Pattern p = Pattern.compile("expires=(.+?)(?=::|$)");
    Matcher m = p.matcher(result);
    while (m.find()) {
      System.out.println("group 1: " + m.group(1));
      // no group 2, accessing will gives you an IndexOutOfBoundsException
      //System.out.println("group 2: " + m.group(2));
    }
    return result;
  }