我用这个代码:
static Pattern escaper = Pattern.compile("([^a-zA-z0-9])");
public static String escapeRE(String str) {
return escaper.matcher(str).replaceAll("\\\\$1");
}
Run Code Online (Sandbox Code Playgroud)
它工作得很漂亮,直到我不使用这个字符串:"[".我看着debuger结果是"]"没有"\\".
System.out.println(Main.escapeRE("+"));
System.out.println(Main.escapeRE(">="));
System.out.println(Main.escapeRE("]"));
System.out.println(Main.escapeRE("["));
Run Code Online (Sandbox Code Playgroud)
结果:
\\+
\\>\\=
]
[
Run Code Online (Sandbox Code Playgroud)
为什么会这样?
你的角色类[^a-zA-z0-9]不正确.它应该是:( [^a-zA-Z0-9]注意A-Z而不是A-z).
由于两个[和]包括在范围内A-z,他们不是你的替代escapeRE方法.
正如@Matt在评论中提到的:如果你试图逃避regex-meta-chars,请看一下专门为此目的创建的Pattern.quote(String)方法.