Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/19.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 带反斜杠的输入不';不匹配正则表达式_Java_Regex - Fatal编程技术网

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));

我相信你的意思是他应该用“\\\\”?