逃脱的连字符是否等同于未转义的连字符?

时间:2013-04-27 01:42:31

标签: java regex

使用java正则表达式,我找到了以下示例

Print\\-Services

我想知道为什么\\-,它是否逃脱了??

2 个答案:

答案 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

似乎提供这个例子的人提供了一个令人困惑或困惑的例子。