使用java正则表达式,我找到了以下示例
Print\\-Services
我想知道为什么\\-
,它逃脱了-?
您不需要在正则表达式中转义“-”。它只是[...]
字符类规范中的一个元字符。
如果那是Java String 文字,那么第一个'\'
将转义第二个'\'
,这将\-
在正则表达式中给出...这是胡说八道1。
如果那不是字符串文字,那么第一个'\'
是转义'\'
正则表达式中的第二个。这不是废话。这意味着匹配一个反斜杠字符。
1 - 然而,这是法律上的废话。javadoc 说:“可以在非字母字符之前使用反斜杠,无论该字符是否是未转义结构的一部分。” 多余的反斜杠将被忽略。
我将假设您指的是字符串文字,它将像"Print\\-Services"
在 Java 程序中一样被写出。在这种情况下,正则表达式将包含一个转义的“-”字符,这实际上没有任何意义,但显然不会被 java.util.regex.Pattern 视为错误。从javadoc:
可以在非字母字符之前使用反斜杠,无论该字符是否是未转义结构的一部分。
举个例子:
Pattern pattern1 = Pattern.compile("Print\\-Services");
Pattern pattern2 = Pattern.compile("Print-Services"); // No PatternSyntaxException
// Pattern pattern3 = Pattern.compile("Print\-Services"); // Not valid Java syntax
我没有真正彻底地测试,但似乎 Pattern 忽略了转义字符。
System.out.println( pattern1.matcher("Print-Services").matches() ); // true
System.out.println( pattern2.matcher("Print-Services").matches() ); // true
似乎提供该示例的人给出了一个令人困惑或困惑的示例。