-1

我有一个输入字符串

hello world , How alan_613 are you roma_222 all doing alan_611 ?

我想使用正则表达式来解析alan_613andalan_611并将其存储在一个数组中并roma_222存储在另一个 String 数组中。

目前我可以使用解析并确认三个字符串的存在

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);

但是,如何在不一次使用两个匹配项的情况下将它们分组到两个数组?

4

1 回答 1

2

您需要通过两次单独的通行证来执行此操作。每次通过都会寻找您感兴趣的值

通过1:(?<=\s|^)(alan)(_)(\d+)

通行证 2:(?<=\s|^)(roma)(_)(\d+)



然而

您想知道如何在没有两遍解决方案的情况下做到这一点。最好使用将每个匹配项放入单独的捕获组的表达式,但我认为这会更麻烦:

(?<=\s|^)(?=alan|roma)(alan)?(roma)?(_)(\d+) Live Demo

在此处输入图像描述

示例文本

How alan_613 are you roma_222 all doing alan_611 

火柴

在此示例中,请注意捕获组 1 如何获得 alan,或捕获组 2 如何获得 roma

[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
于 2013-08-30T14:04:16.343 回答