使用java正则表达式,我找到了以下示例
Print\\-Services
我想知道为什么\\-
,它是否逃脱了??
答案 0 :(得分:3)
你不需要在正则表达式中转义' - '。它只是[...]
字符类规范中的元字符。
如果那是一个Java字符串文字,那么第一个'\'
将逃脱第二个'\'
,这将在正则表达式中给出\-
...这是无意义的 1
如果那不是字符串文字,那么第一个'\'
正在逃避正则表达式中的第二个'\'
。那不是废话。这意味着匹配反斜杠字符。
1 - 然而, legal 无意义。 javadoc说:“在非字母字符之前可以使用反斜杠,无论该字符是否是未转义构造的一部分。”多余的反斜杠将被忽略。
答案 1 :(得分:1)
我将假设您指的是字符串文字,它将在Java程序中写为"Print\\-Services"
。在这种情况下,正则表达式将包含一个转义的' - '字符,这实际上没有意义,但显然不会被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
似乎提供这个例子的人提供了一个令人困惑或困惑的例子。