Java 带反斜杠的输入不';不匹配正则表达式
我正在尝试创建一个正则表达式匹配器,但它没有按预期工作Java 带反斜杠的输入不';不匹配正则表达式,java,regex,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,但应该通过。该正则表达式有什么问题?您应该使用:\\\\来匹配Java正则表达式中的反斜杠: String input = "// sourc
String input = "// source C:\\path\\to\\folder";
System.out.println(Pattern.matches("//\\s*source\\s+[a-zA-Z]:(\\[a-zA-Z0-9_-]+)+", input));
它返回
false
,但应该通过。该正则表达式有什么问题?您应该使用:\\\\
来匹配Java正则表达式中的反斜杠:
String input = "// source C:\\path\\to\\folder";
boolean m = Pattern.matches("//\\s*source\\s+[a-zA-Z]:(\\\\[a-zA-Z0-9_-]+)+", input);
//=> true
首先需要对字符串进行转义,即
\\
,对底层正则表达式引擎进行另一个转义,即\
,以获得文本\
反斜杠。这就是问题所在
System.out.println(Pattern.matches("//\\s*source\\s+[a-zA-Z]:(\\\\[a-zA-Z0-9_-]+)+", input));
^^
在正则表达式中,反斜杠必须转义为反斜杠。这是两个反斜杠。再加上Java转义,您必须编写四个反斜杠来匹配一个。您忘记了
\\
中的[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));
我相信你的意思是他应该用“\\\\”?