“C:\\”的正则表达式

时间:2011-02-25 22:36:00

标签: java regex

我正在尝试查找可以找到字符串“C:\\”的正则表达式。

我的代码是:

String test = "C:\\";  
String regex = "[a-z]*[A-Z]*[:]*\\";  
if(test.matches(regex))  
    System.out.println("Success!");  
else  
    System.out.println("Failure!");  

我收到了PatternSyntaxException。我尝试过很多正则表达式,结果是一样的。

我该如何解决?

5 个答案:

答案 0 :(得分:2)

简单(但可能毫无用处)的答案是“。*。”。

在这种情况下,您显然希望更接近:"[a-zA-Z]:\\\\"。这只需要一个字母,然后是冒号,然后是反斜杠。假设你的字符串应该代表Windows上某个磁盘的根,它应该比你在任何情况下的密码都要近得多。

答案 1 :(得分:0)

序列\\在大多数语言中都有特殊含义。这就是为什么它作为一个路径分离器的错误选择。你在这里遇到的问题是它在Java和正则表达式中具有特殊含义。这意味着\\\\在Java中变为\\,在正则表达式中变为\。

BTW我认为你只需要“[a-zA-z]:\\\\”

OMG它在SO上也有特殊含义:P

答案 2 :(得分:0)

你需要双重转义,一次用于Java字符串转义,一次用于正则表达式转义:

String test = "C:\\";
String regex = "[a-zA-Z]:\\\\";
if ...

答案 3 :(得分:0)

如果您要明确查找C:\,则可以使用String regex ="C:\\";不是非常灵活,但完全适合。

您可能正在寻找的内容类似于String regex = "[A-Z]:\\\\"; 这说“匹配”A“和”Z“之间范围内的单个字符然后”匹配字符“:”“然后”匹配字符“。 如果你需要包含小写的开头字母,请使用String regex = "[a-zA-Z]:\\\\";,它匹配“a”和“z”之间或“A”和“Z”之间的单个字符。

答案 4 :(得分:0)

为什么不使用String.contains("C:\\")