简体   繁体   中英

Java Pattern to match String beginning and end?

I have an input that looks like this : 0; expires=2016-12-27T16:52:39 0; expires=2016-12-27T16:52:39 I am trying extract from this only the date, using Pattern and Matcher .

  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;
  }

Why does this matcher find more than 1 group ? The output is as follows:

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

How can I get only group 2 out of this?

Thank you !

Because you have used more than one capturing group in your regex.

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

Just remove the capturing group around

  1. expires
  2. ::
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;
  }

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM