Java模式匹配字符串的开头和结尾?

标签 java regex

我有一个输入,如下所示:0;过期=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;
  }

为什么此匹配器找到超过 1 个组?输出结果如下:

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

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

谢谢!

最佳答案

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

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

只需删除周围的捕获组

  1. 过期
  2. ::

关于Java模式匹配字符串的开头和结尾?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41344051/

相关文章:

java - 返回 ArrayList 时,我是否必须同时返回 <Type> ?

java - 如何将双值从jsp存储到spring mvc Controller

java - 从我的 Android 应用程序启动 Adob​​e Air 应用程序

java - 对于在 ADODB 中反序列化值的特殊情况,我如何将 PHP preg_split 移植到 Java?

regex - 如何匹配与Perl中的特定模式不匹配的字符串?

Java 泛型类型安全

java - 如何在我的代码中实现线程安全

javascript - 在 JavaScript 中查找文本字符串

python - 错误: Can't use string pattern on a byte-like object

java - 使用 split ("|"通过管道符号拆分 Java 字符串)