正则表达式中的3个组:
模式=(a)(b)123(c)
我需要摆脱a,b,c
Java中的:
while (matcher.find()) {
matcher.appendReplacement(sb, "");
matcher.appendReplacement(sb, ""); // fails from here
matcher.appendReplacement(sb, "");
}
异常:
java.lang.StringIndexOutOfBoundsException: String index out of range: -30 at java.lang.String.substring(Unknown Source) at java.lang.String.subSequence(Unknown Source) at java.util.regex.Matcher.getSubSequence(Unknown Source) at java.util.regex.Matcher.appendReplacement(Unknown Source)
有没有办法连续替换匹配的组?
编辑:sb是StringBuffer
。已经尝试了空new StringBuffer()
和非空情new StringBuffer(target_text_str)
。
java 1.6.0_21-b07
答案 0 :(得分:2)
每appendReplacement()
次来电,您应该只有find()
次来电:
while (matcher.find()) {
matcher.appendReplacement(sb, "");
}
这将删除输入中的每个整个匹配。
如果您按照指示要删除某些部分匹配项,那么您必须将要保留的部分分组并将其添加到替换项中。使用模式ab(123)c
,您可以这样做:
while (matcher.find()) {
matcher.appendReplacement(sb, "$1");
}
如果由于某些其他原因需要其他组(例如,您需要评估它们),那么您可以保留它们(即使用(a)(b)(123)(c)
并使用$3
而不是{$1
引用第三组{1}})。
答案 1 :(得分:2)
pattern = "(a)(b)(123)(c)"
// ...
while (matcher.find()) {
matcher.appendReplacement(sb, "$3");
}
请参阅the docs