[英]Escape special symbols from regexpr
我使用以下代碼:
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]
(注意AZ
而不是Az
)。
由於[
和]
都包含在Az
范圍內,因此您的escapeRE
方法不會替換它們。
正如@Matt在評論中提到的那樣:如果您嘗試轉義regex-meta-chars,請查看為此目的而專門創建的Pattern.quote(String)方法。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.