如果它与其他模式不匹配,如何替换所有匹配的模式?

时间:2013-07-30 22:50:10

标签: java regex replace

我想替换匹配模式的子字符串,只要它与不同的模式不匹配。例如,在下面显示的代码中,我想替换所有'%s',但保持':%s'不变。

String template1 = "Hello:%s";
String template2 = "Hello%s";

String regex = "[%s&&^[:%s]]";

String str = template1.replaceAll(regex, "");
System.out.println(str);

str = template2.replaceAll(regex, "");
System.out.println(str);

输出应为:

Hello:%s
Hello

我遗漏了正则表达式中的一些内容。有线索吗?谢谢!

1 个答案:

答案 0 :(得分:7)

使用否定lookbehind来实现目标:

String regex = "(?<!:)%s";

只有在%s之前没有:时才匹配{{1}}。