我使用以下代码:
static Pattern escaper = Pattern.compile("([^a-zA-z0-9])");
public static String escapeRE(String str) {
return escaper.matcher(str).replaceAll("\\\\$1");
}
它很有效,直到我不使用以下字符串:“ [”。我在调试器中查看了结果,结果是“]”而不是“ \\”。
System.out.println(Main.escapeRE("+"));
System.out.println(Main.escapeRE(">="));
System.out.println(Main.escapeRE("]"));
System.out.println(Main.escapeRE("["));
结果:
\\+
\\>\\=
]
[
为什么会这样呢?
最佳答案
您的角色类[^a-zA-z0-9]
不正确。它应该是:[^a-zA-Z0-9]
(请注意A-Z
而不是A-z
)。
由于[
和]
都包含在A-z
范围内,因此它们不会被escapeRE
方法替换。
编辑
正如@Matt在评论中提到的那样:如果您要转义regex-meta-chars,请查看专门为此目的创建的Pattern.quote(String)方法。