[英]Regular expression for matching double-quote but not backslash-double-quote
[英]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.