匹配反斜杠
如果要匹配正则表达式中的反斜杠,则必须将其转义。
反斜杠是正则表达式中的转义字符。你可以使用’\\‘来引用正则表达式中的单个反斜杠。
但是,反斜杠也是 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'.
}