我使用此代码:
static Pattern escaper = Pattern.compile("([^a-zA-z0-9])");
public static String escapeRE(String str) {
return escaper.matcher(str).replaceAll("\\\\$1");
}
它很漂亮,直到我不使用这个字符串:“[”。我查看了debuger,结果是“]”没有“\\”。
System.out.println(Main.escapeRE("+"));
System.out.println(Main.escapeRE(">="));
System.out.println(Main.escapeRE("]"));
System.out.println(Main.escapeRE("["));
结果:
\\+
\\>\\=
]
[
为什么会这样?
答案 0 :(得分:7)
您的角色等级[^a-zA-z0-9]
不正确。它应该是:[^a-zA-Z0-9]
(请注意A-Z
而不是A-z
)。
由于[
和]
都包含在A-z
范围内,因此不会被escapeRE
方法取代。
正如@Matt在评论中提到的:如果你试图逃避正则表达式元字符,请查看专门为此目的创建的Pattern.quote(String)方法。