java - 使用 Java 正则表达式匹配器查找最后一个匹配项

标签 java regex

我正在尝试获得匹配的最后一个结果,而不必循环通过 .find()

这是我的代码:

String in = "num 123 num 1 num 698 num 19238 num 2134";
Pattern p = Pattern.compile("num ([0-9]+)");
Matcher m = p.matcher(in);

if (m.find()) {
     in = m.group(1);
}

这会给我第一个结果。如何在不遍历可能很大的列表的情况下找到 LAST 匹配项?

最佳答案

您可以将 .* 添加到您的正则表达式中,这将 greedily消耗所有字符直到最后一场比赛:

import java.util.regex.*;

class Test {
  public static void main (String[] args) {
    String in = "num 123 num 1 num 698 num 19238 num 2134";
    Pattern p = Pattern.compile(".*num ([0-9]+)");
    Matcher m = p.matcher(in);
    if(m.find()) {
      System.out.println(m.group(1));
    }
  }
}

打印:

2134

您还可以反转字符串以及更改正则表达式以匹配反转:

import java.util.regex.*;

class Test {
  public static void main (String[] args) {
    String in = "num 123 num 1 num 698 num 19238 num 2134";
    Pattern p = Pattern.compile("([0-9]+) mun");
    Matcher m = p.matcher(new StringBuilder(in).reverse());
    if(m.find()) {
      System.out.println(new StringBuilder(m.group(1)).reverse());
    }
  }
}

但是这两种解决方案都比使用 while (m.find()), IMO 循环所有匹配更好。

关于java - 使用 Java 正则表达式匹配器查找最后一个匹配项,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6417435/

相关文章:

java - 如何在java中读取XML样式的文本文件?

java - 部分更新文档中的字段 - findAndModify 删除所有其他字段?

java - 如何将 double 值更改为四位小数点值

ruby - 'no implicit conversion of Regexp into String (TypeError)' 是什么意思?

javascript - 创建一个正则表达式来查找逗号分隔的字符串而不重复中心部分

java - 使用片段的 Spring Data Jpa 存储库如何应用查询提示和实体图

java - 如何使用 Java 从 Maven Nexus 存储库下载 Artifact 列表

regex - 搜索并替换为正则表达式以增加 Visual Studio Code 中的数字

php - 如何抢IP :PORT with regex?

ruby - 正则表达式的问题