簡體   English   中英

為什么將雙反斜杠 (\\\\) 添加到正則表達式模式中

[英]Why double backslash (\\) are added to regular expression pattern

我正在用 Java 編寫一個正則表達式,它應該允許這些字符集: “az,Az,0-9,space,ñ,Ñ”

正則[a-zA-Z0-9\\\\s\\\ñ\\\Ñ]*在數據庫中是這樣聲明的, [a-zA-Z0-9\\\\s\\\ñ\\\Ñ]*

在哪里:

  • \\\ñ = ñ
  • \\\Ñ = Ñ

但是下面的示例字符串不匹配, String data = "ñ"

在調試時,我看到我的正則表達式模式的實際值是: [a-zA-Z0-9\\\\\\\\s\\\\\\\ñ\\\\\\\Ñ]*

如您所見,正在添加雙反斜杠模式。

[a-zA-Z0-9\\\\s\\\\u00F1\\\\u00d1]*

所以我寫了一個程序並得出結論,額外的雙反斜杠是導致問題的原因。

這打印為真:

    public static void main(String[] args) {
        String data = "ñ";              
        System.out.println(data.matches("[a-zA-Z0-9\\s\\u00F1\\u00d1]*"));
    }

但這返回錯誤:

    public static void main(String[] args) {
        String data = "ñ";              
        System.out.println(data.matches("[a-zA-Z0-9\\\\s\\\\u00F1\\\\u00d1]*"));
    }

關於如何擺脫這些字符的任何想法,或者可能以不同的方式編寫相同的正則表達式?

解決方案:

這就是我在數據庫中設置 regExp 的方式: [a-zA-Z0-9\\s\ñ\Ñ]*

因此,Java 在運行時轉義字符並按預期工作: [a-zA-Z0-9\\\\s\\\ñ\\\Ñ]*

這是 Java 轉義字符和 Regex 轉義字符之間的沖突,例如在 Java 中輸入\\您需要先用另一個\\轉義它。 並且由於 Regex 由 Java String 表示,因此每次要使用\\都需要對其進行轉義。

現在沖突開始的地方,在正則表達式中,如果你想匹配\\你也需要轉義它,所以你需要使用\\\\有一個\\ 現在將兩者結合起來,在正則表達式中有一個\\你需要\\\\並且從 java 字符串中得到\\\\你需要\\\\\\\\ 我希望這很容易理解。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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