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

Bal*_*ala 1 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);
Run Code Online (Sandbox Code Playgroud)

输出应该是:

Hello:%s
Hello
Run Code Online (Sandbox Code Playgroud)

我在我的正则表达式中遗漏了一些东西.有线索吗?谢谢!

jlo*_*rdo 7

使用负面的lookbehind来实现您的目标:

String regex = "(?<!:)%s";
Run Code Online (Sandbox Code Playgroud)

%s只有:在它之前没有权利时才匹配.