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

时间:2013-08-30 12:55:43

标签: java regex

我有一个像

这样的输入字符串
hello world , How alan_613 are you roma_222 all doing alan_611 ?

我想使用正则表达式来解析alan_613alan_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);

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

1 个答案:

答案 0 :(得分:2)

你需要通过两个单独的传球来做到这一点。每个过程都会查找您感兴趣的值

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

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



然而

如果没有双通解决方案,你想知道如何做到这一点。最好的你可以使用一个表达式将每个匹配放入一个单独的捕获组,但我认为这会更麻烦:

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

enter image description here

示例文字

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