有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

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

我有这个代码,我想找到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) 个答案

  1. # 1 楼答案

    你的简历不正确。第一部分:frank.*匹配所有内容,然后回溯,直到其余部分匹配成功。请尝试以下方法:

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

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

  2. # 2 楼答案

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

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