我试图创建一个正则表达式匹配器,但它没有按预期工作。
String input = "// source C:\\path\\to\\folder";
System.out.println(Pattern.matches("//\\s*source\\s+[a-zA-Z]:(\\[a-zA-Z0-9_-]+)+", input));
它返回false
但它应该通过。这个正则表达式有什么问题?
答案 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));