我写代码匹配文件路径具有extenstion .ncx,“无效转义序列(有效的有 B 吨 n ˚F r ” ” \)”语法错误
pattern = Pattern.compile("$(\\|\/)[a-zA-Z0-9_]/.ncx");
Matcher matcher = pattern.mather("\sample.ncx");
这显示了无效的转义序列(有效的转义序列是\ b \ t \ n \ f \ r \“\'\)语法错误模式。我该如何解决它。
我写代码匹配文件路径具有extenstion .ncx,“无效转义序列(有效的有 B 吨 n ˚F r ” ” \)”语法错误
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真正的文件名,只是为了演示如何完成。
试试这个
$(\\|\\/)[a-zA-Z0-9_]/.ncx
在java中\
是转义保留字符。所以你需要逃脱\
。
pattern=Pattern.compile("$(\\\\|\\/)[a-zA-Z0-9_]/.ncx");
这应该是`$(\\\\ | \\// [a-zA-Z0-9 _] /。ncx`第一个'\'也需要被转义。 – Tim 2011-02-11 05:08:36
错过了第二个'\\' – 2011-02-11 04:58:41
正在编辑。 :)知道人们会很快回答。他正在寻找操作系统无关的文件路径,我猜。 – Nishant 2011-02-11 04:59:34