我最近试图回答一个问题,在尝试解决问题时,我遇到了一个问题。
给出以下代码
private void regexample(){
String x = "a3ab4b5";
Pattern p = Pattern.compile("(\\D+(\\d+)\\D+){2}");
Matcher m = p.matcher(x);
while(m.find()){
for(int i=0;i<=m.groupCount();i++){
System.out.println("Group " + i + " = " + m.group(i));
}
}
}
输出
Group 0 = a3ab4b Group 1 = b4b Group 2 = 4
我是否有任何直截了当的方式来获取值3
?该模式应该查找两次(\\D+(\\d+)\\D+)
背靠背,a3a
是匹配的一部分。我意识到我可以将表达式更改为(\\D+(\\d+)\\D+)
,然后查找所有匹配项,但这在技术上并不相同。是进行双重搜索的唯一方法吗?即:使用给定的模式匹配字符串,然后再次搜索外部组的每个计数?
我猜测第一个值被第二个值覆盖了,但由于我对正则表达式并不那么好,所以我希望有一些我不知道的东西。
答案 0 :(得分:3)
不可能捕获同一组的多次出现(使用标准正则表达式引擎)。你可以使用这样的东西:
Properties props = new Properties()
props.setProperty("user","neo4j");
props.setProperty("password","secret");
Connection con = DriverManager.getConnection("jdbc:neo4j://localhost:7474/",props);
现在,有四个组而不是两个组,因此您将获得预期的值。
not functional处理类似的问题。