Java 用于从单个字符串中识别和分离多个子字符串的正则表达式

Java 用于从单个字符串中识别和分离多个子字符串的正则表达式,java,regex,Java,Regex,我有一个输入字符串,比如 hello world , How alan_613 are you roma_222 all doing alan_611 ? 我想使用正则表达式来解析alan_613和alan_611并存储在一个数组中,roma_222存储在另一个字符串数组中 现在,我可以使用 String re1 = ".*?"; String re2 = " ( alan| roma)"; String re3 = "(_)"; String

我有一个输入字符串,比如

hello world , How alan_613 are you roma_222 all doing alan_611 ?
我想使用正则表达式来解析
alan_613
alan_611
并存储在一个数组中,
roma_222
存储在另一个字符串数组中

现在,我可以使用

String re1 = ".*?";
        String re2 = " ( alan| roma)";
        String re3 = "(_)";
        String re4 = "(\\d+)";

        Pattern p = Pattern.compile(re2 + re3 + re4, Pattern.CASE_INSENSITIVE
                | Pattern.DOTALL);
        Matcher m = p.matcher(input);

但是,如果不在一个过程中使用两个匹配项,如何将它们分组到两个数组中呢?

您需要使用两个单独的过程来完成此操作。每次传递都会查找您感兴趣的值


通过1:
(?嗯……你的愿望不可能一次就实现。捕获组是输入文本中的子字符串,它由正则表达式中圆括号内的表达式匹配。通读这篇文章,因为他们有一些捕获组的非常好的示例。这是一个很好的问题。使用捕获组需要你o进行一些后处理,将数据从每个找到的匹配中分离出来。从长远来看,多次传递将更容易维护。好的,感谢您提供的信息。将此作为正确答案进行投票。您能否提供任何尝试进行相同操作的示例。这就是将一组字符串与父字符串和gro进行比较将类似的字符串升级到ArrayList,任何一个方向都会造成一些开销。就我个人而言,我会选择更易于维护的解决方案。根据匹配的数据量,您甚至可能不会注意到两种可能的解决方案之间在性能上的明显差异。还有一个高级问题。您认为正则表达式就性能而言,解决这个问题的最佳方法是什么?确切地说,我是在Java和Android中工作。还是应该使用普通的字符串搜索或其他方法?
How alan_613 are you roma_222 all doing alan_611 
[0][0] = alan_613
[0][1] = alan
[0][2] = 
[0][3] = _
[0][4] = 613

[1][0] = roma_222
[1][1] = 
[1][2] = roma
[1][3] = _
[1][4] = 222

[2][0] = alan_611
[2][1] = alan
[2][2] = 
[2][3] = _
[2][4] = 611