簡體   English   中英

從regexpr轉義特殊符號

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM