我使用以下代码:

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)方法。

09-25 16:45