假设此输入字符串:
A-B-C-B-Z
我试图替换B
和A
之间的任何Z
。
以下正则表达式仅匹配最后一次出现的B
:
(.*A.*)B(.*Z.*)
...用[{1}}替换(Pattern.replaceAll()
)时结果为
$1-$2
预期结果将是
A-B-C---Z
代替。
感谢您的帮助!
答案 0 :(得分:2)
在Java中,你可以使用这样的外观:
String str = "F-B-P-B-A-B-C-B-Z-D-B-A-B-C-B-Z-C";
String repl = str.replaceAll("(?<=A.{0,999})B(?=((?!A|Z).)*Z)", "-");
//=> F-B-P-B-A---C---Z-D-B-A---C---Z-C
根据您的评论,您可以使用此正则表达式:
String repl = str.replaceAll(
"(?<=<!\\[CDATA\\[.{0,999})&(?=((?!<!\\[CDATA\\[|\\]\\]>).)*\\]\\]>)", "-");
请注意,假设您的输入长度达到999。