匹配反斜槓

如果要匹配正規表示式中的反斜槓,則必須將其轉義。

反斜槓是正規表示式中的轉義字元。你可以使用’\\‘來引用正規表示式中的單個反斜槓。

但是,反斜槓也是 Java 文字字串中的轉義字元。要從字串文字中生成正規表示式,必須轉義每個反斜槓。在字串文字中,’\\\\‘可用於建立帶有’\\‘的正規表示式,而’\\‘又可以匹配’\’。

例如,考慮匹配“C:\ dir \ myfile.txt”之類的字串。正規表示式 ([A-Za-z]):\\(.*) 將匹配,並提供驅動器號作為捕獲組。注意加倍的反斜槓。

要在 Java 字串文字中表達該模式,需要對正規表示式中的每個反斜槓進行轉義。

    String path = "C:\\dir\\myfile.txt";
    System.out.println( "Local path: " + path ); // "C:\dir\myfile.txt"
    
    String regex = "([A-Za-z]):\\\\.*"; // Four to match one
    System.out.println("Regex:      " + regex ); // "([A-Za-z]):\\(.*)"
    
    Pattern pattern = Pattern.compile( regex );
    Matcher matcher = pattern.matcher( path );
    if ( matcher.matches()) {
        System.out.println( "This path is on drive " + matcher.group( 1 ) + ":.");
        // This path is on drive C:.
    }

如果你想匹配兩個反斜槓,你會發現自己在一個文字字串中使用八個,在正規表示式中表示四個,以匹配兩個。

    String path = "\\\\myhost\\share\\myfile.txt";
    System.out.println( "UNC path: " + path ); // \\myhost\share\myfile.txt"
    
    String regex = "\\\\\\\\(.+?)\\\\(.*)"; // Eight to match two
    System.out.println("Regex:    " + regex ); // \\\\(.+?)\\(.*) 
    
    Pattern pattern = Pattern.compile( regex );
    Matcher matcher = pattern.matcher( path );
    
    if ( matcher.matches()) {
        System.out.println( "This path is on host '" + matcher.group( 1 ) + "'.");
        // This path is on host 'myhost'.
    }