我正在尝试查找可以找到字符串“C:\\”的正则表达式。
我的代码是:
String test = "C:\\";
String regex = "[a-z]*[A-Z]*[:]*\\";
if(test.matches(regex))
System.out.println("Success!");
else
System.out.println("Failure!");
我收到了PatternSyntaxException。我尝试过很多正则表达式,结果是一样的。
我该如何解决?
答案 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:\\")
?