我试图创建一个正则表达式匹配器,但它不能按预期工作。反斜杠输入与正则表达式不匹配
String input = "// source C:\\path\\to\\folder";
System.out.println(Pattern.matches("//\\s*source\\s+[a-zA-Z]:(\\[a-zA-Z0-9_-]+)+", input));
它返回false
但它应该通过。那个正则表达式有什么问题?
我试图创建一个正则表达式匹配器,但它不能按预期工作。反斜杠输入与正则表达式不匹配
String input = "// source C:\\path\\to\\folder";
System.out.println(Pattern.matches("//\\s*source\\s+[a-zA-Z]:(\\[a-zA-Z0-9_-]+)+", input));
它返回false
但它应该通过。那个正则表达式有什么问题?
反斜杠。那是错的。
System.out.println(Pattern.matches("//\\s*source\\s+[a-zA-Z]:(\\\\[a-zA-Z0-9_-]+)+", input));
^^
在正则表达式中,反斜杠必须是反斜杠。这是两个反斜杠。除此之外,Java转义,你必须写四个反斜杠来匹配一个。
您应该使用:\\\\
在Java正则表达式匹配一个反斜杠:
String input = "// source C:\\path\\to\\folder";
boolean m = Pattern.matches("//\\s*source\\s+[a-zA-Z]:(\\\\[a-zA-Z0-9_-]+)+", input);
//=> true
请先逃逸即弦乐\\
和另一个逃脱即\\
为基础,正则引擎得到一个字面\
。
你忘了在[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));
我相信你的意思,他应该使用''\\\\? – VGR
是的这是正确的@VGR,谢谢指出错字 – anubhava