我正在尝试获得比赛的最后结果,而不必遍历.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);
}
这将给我第一个结果。我如何找到最后一个匹配,而不是循环通过一个潜在的巨大的列表?
使用负向前视:
String in = "num 123 num 1 num 698 num 19238 num 2134";
Pattern p = Pattern.compile("num (\\d+)(?!.*num \\d+)");
Matcher m = p.matcher(in);
if (m.find()) {
in= m.group(1);
}
正则表达式读作"num后跟一个空格和至少一个数字(num后跟一个空格和至少一个数字)“。
通过将其与正向后视相结合,您可以获得更多的乐趣:
String in = "num 123 num 1 num 698 num 19238 num 2134";
Pattern p = Pattern.compile("(?<=num )\\d+(?!.*num \\d+)");
Matcher m = p.matcher(in);
if (m.find()) {
in = m.group();
}
它的意思是“在(num和一个空格)之前至少有一个数字,在它之后的任何点上都不跟(num,后面有一个空格和至少一个数字)”。这样,您就不必纠结于分组,也不必担心从
Matcher.group(int)抛出的潜在IndexOutOfBoundsException。
浙公网安备 33010602011771号