使用明确的单词边界,(?<!\w)
和(?!\w)
,而不是\b
上下文相关的:
from = "(?<!\\w)" + Pattern.quote(from) + "(?!\\w)";
(?<!\w)
如果在当前位置的左侧紧邻有一个非单词char ,则是一个向后的否定后向匹配;如果在当前位置的右侧紧邻有一个非char字符,(?!\w)
则一个否定的向前查找使匹配失败。 。在Pattern.quote(from)
逃跑中的任何特殊字符是必要的from
变量。
参见Java演示:
String line = "add, $temp4, $temp40, 42";
String to = "register1";
String from = "$temp4";
String outString;
from = "(?<!\\w)" + Pattern.quote(from) + "(?!\\w)";
outString = line.replaceAll(from, to);
System.out.println(outString);
// => add, register1, $temp40, 42