我正在尝试获得匹配的最后一个结果,而不必循环通过 .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/