在 Java 正則表達式中匹配一個反斜槓 \,需要在模式字符串中寫 四個反斜槓:\\\\。
import java.util.regex.Matcher;
import java.util.regex.Pattern;
public class Test {
public static void main(String[] args) {
String textString = "\\"; // 字符串字面量:一個反斜槓
Pattern pt = Pattern.compile("\\\\"); // 正則模式:四個反斜槓
Matcher mc = pt.matcher(textString);
String result = mc.replaceAll("xx");
System.out.println("原字符串: " + textString); // 輸出: \
System.out.println("替換後: " + result); // 輸出: xx
}
}
需搞清兩個層面的轉義機制:
\\(第一個轉義第二個)。\\(第一個轉義第二個)。組合過程:
\\(匹配一個字面量反斜槓)。\\,需每個反斜槓轉義 → \\\\。"\\\\" 解析為字符串 \\,傳給正則引擎,引擎解析 \\ 為匹配一個反斜槓。| 層級 | 源碼寫法 | 編譯/解析後 | 說明 |
|---|---|---|---|
| Java 字符串字面量 | "\\\\" | \\ | 每對 \\ → 1 個 \ |
| 正則引擎接收 | — | \\ | 正則元字符轉義,匹配字面量 \ |
| 最終匹配 | — | \ | 成功匹配目標字符串中的單個反斜槓 |
| 源碼寫法 | 字符串值 | 正則模式 | 結果 |
|---|---|---|---|
"\\" | \ | \(不完整轉義) | PatternSyntaxException:非法正則 |
"\\\\" | \\ | \\ | 正確:匹配單個反斜槓 |
"\\\\\\\\" | \\\\ | \\\\ | 匹配兩個連續反斜槓 |
Pattern.quote() 自動轉義,或用原始字符串(Java 13+ 文本塊 """...""" 減少轉義)。pattern.pattern() 確認正則引擎實際收到的模式。