逃离regexpr的特殊符号

时间:2011-09-16 20:07:55

标签: java regex

我使用此代码:

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("["));

结果:

\\+
\\>\\=
]
[

为什么会这样?

1 个答案:

答案 0 :(得分:7)

您的角色等级[^a-zA-z0-9]不正确。它应该是:[^a-zA-Z0-9](请注意A-Z而不是A-z)。

由于[]都包含在A-z范围内,因此不会被escapeRE方法取代。

修改

正如@Matt在评论中提到的:如果你试图逃避正则表达式元字符,请查看专门为此目的创建的Pattern.quote(String)方法。