-1

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

Print\\-Services

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

4

2 回答 2

3

您不需要在正则表达式中转义“-”。它只是[...]字符类规范中的一个元字符。

如果那是Java String 文字,那么第一个'\'将转义第二个'\',这将\-在正则表达式中给出...这是胡说八道1

如果那不是字符串文字,那么第一个'\'是转义'\'正则表达式中的第二个。这不是废话。这意味着匹配一个反斜杠字符。


1 - 然而,这是法律上的废话。javadoc 说:“可以在非字母字符之前使用反斜杠,无论该字符是否是未转义结构的一部分。” 多余的反斜杠将被忽略。

于 2013-04-27T01:45:52.847 回答
1

我将假设您指的是字符串文字,它将像"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

似乎提供该示例的人给出了一个令人困惑或困惑的示例。

于 2013-04-27T02:10:46.283 回答