2016-03-24 52 views
1

我试图创建一个正则表达式匹配器,但它不能按预期工作。反斜杠输入与正则表达式不匹配

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

反斜杠。那是错的。

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

在正则表达式中,反斜杠必须是反斜杠。这是两个反斜杠。除此之外,Java转义,你必须写四个反斜杠来匹配一个。

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

我相信你的意思,他应该使用''\\\\? – VGR

+0

是的这是正确的@VGR,谢谢指出错字 – anubhava

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)); 
相关问题