匹配反斜槓
如果要匹配正規表示式中的反斜槓,則必須將其轉義。
反斜槓是正規表示式中的轉義字元。你可以使用’\\‘來引用正規表示式中的單個反斜槓。
但是,反斜槓也是 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'.
}