我有一个像
这样的输入字符串hello world , How alan_613 are you roma_222 all doing alan_611 ?
我想使用正则表达式来解析alan_613
和alan_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);
但是如何在一次传递中不使用两个匹配的情况下将它们分组到两个数组?
答案 0 :(得分: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