我想替换java字符串中的一些文本,但如果文本位于$和&所定义的部分内,我不想替换它。
示例:替换文本foo的字符串“$ foo& bar foo”将为“$ foo& bar $ foo&”。
因此必须使用$和&转义替换文本。但是如果已经应用了逃生则不行。目前我正在使用正则表达式([^\\$]|^)text([^&]|$)
并且它运行良好,但如果只找到其中一个符号,则正则表达式不匹配。
示例:对于文本“bar $ foo”,正则表达式([^\\$]|^)foo([^&]|$)
不匹配,但仅当找到两个符号时我才想要不匹配。
答案 0 :(得分:3)
为$
使用否定后瞻,为&
使用否定前瞻。这对你有用:
public static void main(String[] args) {
String s = "$foo& bar foo";
s= s.replaceAll("(?<!\\$)foo(?!&)", "\\$foo&");
System.out.println(s);
}
O / P:
$foo& bar $foo&