我试图获得匹配的最后结果,而不必循环通过.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);
}
Run Code Online (Sandbox Code Playgroud)
这将给我第一个结果.我怎样才能找到最后一场比赛,而不是通过潜在的巨大名单?
Bar*_*ers 18
你可以.*
在你的正则表达式前加上,这将贪婪地消耗所有字符直到最后一个匹配:
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));
}
}
}
Run Code Online (Sandbox Code Playgroud)
打印:
2134
Run Code Online (Sandbox Code Playgroud)
您也可以反转字符串以及更改正则表达式以匹配反向字符串:
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());
}
}
}
Run Code Online (Sandbox Code Playgroud)
但是这两种解决方案都不比使用while (m.find())
IMO 循环所有匹配更好.
小智 14
要获得最后一场比赛,即使这样也有效,并且不确定为什么之前没有提到过:
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(m.groupCount());
}
Run Code Online (Sandbox Code Playgroud)
为什么不保持简单?
in.replaceAll(".*[^\\d](\\d+).*", "$1")
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
42105 次 |
最近记录: |