我编写了用于匹配扩展名为 .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'
$
anchors匹配到字符串的末尾(或在多行模式下匹配到一行的末尾)。它属于正则表达式的结尾,而不是开头。
[/\\\\]
是 character class匹配正斜杠或反斜杠。反斜杠必须进行双重转义,因为它在正则表达式和字符串文字中都有特殊含义。正斜杠不需要需要转义。
[a-zA-Z0-9_]+
匹配一个或多个列出的字符;没有 plus sign ,你只匹配了一个。
正则表达式中的第二个正斜杠没有意义,但你确实需要一个反斜杠来转义 dot -- 当然,对于 Java 字符串文字,反斜杠必须进行转义。
因为我是从alternation切换过来的(|
) 到前导斜杠的字符类,不再需要正则表达式中的括号。相反,我用它们来 capture实际的文件名,只是为了演示这是如何完成的。
关于java - "Invalid escape sequence (valid ones are\b\t\n\f\r\"\'\\)"语法错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4965739/