如何在正则表达式中使用组在java中?

时间:2014-03-31 21:36:29

标签: java regex

我有这个代码,我想找到1234和4321,但目前我只能得到4321.我怎么能解决这个问题?

String a = "frankabc123 1234 frankabc frankabc123 4321 frankabc";
String rgx = "frank.* ([0-9]*) frank.*";
Pattern patternObject = Pattern.compile(rgx);
Matcher matcherObject = patternObject.matcher(a);
while (matcherObject.find()) {
    System.out.println(matcherObject.group(1));
}

2 个答案:

答案 0 :(得分:2)

你的正则表达式太贪心了。让它不贪心。

String rgx = "frank.*? ([0-9]+) frank";

答案 1 :(得分:1)

你的r.e.是不正确的。第一部分:frank.*匹配所有内容,然后回溯,直到匹配的其余部分成功。试试这个:

String rgx = "frank.*? ([0-9]*) frank";

量词之后的?将使其不情愿,匹配尽可能少的字符以匹配模式的其余部分。尾随.*也会导致问题(在评论中指出nhahtdh)。