“无效的转义序列(有效转义序列是\ b \ t \ n \ f \ r \”\’\\)“语法错误

我编写了匹配filepath的代码,它有扩展名.ncx,

pattern = Pattern.compile("$(\\|\/)[a-zA-Z0-9_]/.ncx"); Matcher matcher = pattern.mather("\sample.ncx"); 

这显示了一个无效的转义序列(有效的转义序列是\ b \ t \ n \ f \ r \“\’\)语法错误模式。我该如何解决它。

 Pattern p = Pattern.compile("[/\\\\]([a-zA-Z0-9_]+\\.ncx)$"); Matcher m = p.matcher("\\sample.ncx"); if (m.find()) { System.out.printf("The filename is '%s'%n", m.group(1)); } 

输出:

 The filename is 'sample.ncx' 

$将匹配锚定到字符串的结尾(或以多行模式结束到行的末尾)。 它属于正则表达式的末尾 ,而不是开头。

[/\\\\]是一个匹配正斜杠或反斜杠的字符类 。 反斜杠必须双重转义,因为它在正则表达式和字符串文字中都有特殊含义。 正斜杠不需要转义。

[a-zA-Z0-9_]+匹配一个或多个列出的字符; 没有加号 ,你只匹配一个

你的正则表达式中的第二个正斜杠是没有意义的,但你需要一个反斜杠来逃避点 – 当然,必须为Java字符串文字转义反斜杠。

因为我从交替 ( | )切换到前导斜杠的字符类,所以不再需要正则表达式中的括号。 相反,我用它们来捕获实际的文件名,只是为了演示如何完成。

在java \是一个用于转义的保留字符。 所以你需要逃避\

 pattern=Pattern.compile("$(\\\\|\\/)[a-zA-Z0-9_]/.ncx"); 

试试这个

 $(\\|\\/)[a-zA-Z0-9_]/.ncx