带反斜杠的输入与正则表达式不匹配

时间:2016-03-24 14:30:30

标签: java regex

我试图创建一个正则表达式匹配器,但它没有按预期工作。

String input = "// source C:\\path\\to\\folder";
System.out.println(Pattern.matches("//\\s*source\\s+[a-zA-Z]:(\\[a-zA-Z0-9_-]+)+", input));

它返回false但它应该通过。这个正则表达式有什么问题?

3 个答案:

答案 0 :(得分:3)

反斜杠。这就是错误。

System.out.println(Pattern.matches("//\\s*source\\s+[a-zA-Z]:(\\\\[a-zA-Z0-9_-]+)+", input));
                                                              ^^

在正则表达式中,必须对反斜杠进行转义 - 反斜杠。这是两个反斜杠。除此之外,Java转义并且您必须编写四个反斜杠来匹配一个。

答案 1 :(得分:0)

您应该使用:\\\\来匹配Java正则表达式中的反斜杠:

String input = "// source C:\\path\\to\\folder";
boolean m = Pattern.matches("//\\s*source\\s+[a-zA-Z]:(\\\\[a-zA-Z0-9_-]+)+", input);
//=> true

首先需要转义,即\\表示字符串,另一个转义即\\表示基础正则表达式引擎,以获得文字\

答案 2 :(得分:0)

您忘记了\\中的[a-zA-Z0-9_-]

String input = "// source C:\\path\\to\\folder";
System.out.println(Pattern.matches("//\\s*source\\s+[a-zA-Z]:(\\\\[a-zA-Z0-9_\\-]+)+", input));