我用一个非常简单的例子这里:JAVA正则表达式模式匹配replacechall重复输入
Pattern pattern = Pattern.compile("(.*)");
Matcher matcher=pattern.matcher("10110");
String returnString = matcher.replaceAll("DATUM $1");
给出returnString = “DATUM 10110DATUM” 而不是 “10110 DATUM”。
这里有什么问题?
编辑:虽然使用(。+)解决了这个问题,但它仍然是一个非常奇怪的正则表现。由于(。*)已经匹配了整个输入,所以java会附加另一个 - empty - group,它不会作为replaceAll语句中的第二个组(通常为$ 2)引用。但是JAVA吐出了这第二组。幸运的是,在添加更多空组匹配之前,它确实停止。
这是一个已知的问题在很多语言摄制的''字符串匹配,然后。 Ë nd的字符串。所以,你在这里有两场比赛。 –
使用https://regex101.com。在这里你可以很容易地发现问题 – Vaibs
其他在线的java正则表达式测试人员并不是那么好: - (( – josef