我正在用 Java 撰寫一個正則運算式,它應該允許這些字符集:“az,Az,0-9,space,?,?”
正則運算式在資料庫中是這樣宣告的, [a-zA-Z0-9\\s\\u00F1\\u00d1]*
在哪里:
- \\u00F1 = ?
- \\u00d1 = ?
但是以下示例字串不匹配, String data = "?"
在除錯時,我看到我的正則運算式模式的實際值是: [a-zA-Z0-9\\\\s\\\\u00F1\\\\u00d1]*
如您所見,正在添加雙反斜杠模式。
[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\u00F1\u00d1]*
因此,Java 在運行時轉義字符并按預期作業: [a-zA-Z0-9\\s\\u00F1\\u00d1]*
uj5u.com熱心網友回復:
這是 Java 轉義字符和 Regex 轉義字符之間的沖突,例如在 Java 中輸入 a\您需要先用另一個\. 并且由于 Regex 由 Java String 表示,因此每次要使用\.
現在這里的沖突開始的地方,在正則運算式,如果你想匹配\,你還需要逃避它,所以你需要使用\\有一個\。現在將兩者結合起來,得到一個\你需要的正則運算式\\和你需要的\\java 字串\\\\。我希望這很容易理解。
轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/366148.html
