java - "Invalid escape sequence (valid ones are\b\t\n\f\r\"\'\\)"语法错误

标签 java android regex

我编写了用于匹配扩展名为 .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/

相关文章:

java - 使用 JUnit 测试多线程代码 - 奇怪的行为

java - 以编程方式添加时如何为 GridLayout 子项设置 layout_columnWeight?

Android - 调整大小的 editText 文本不居中?

php - 简单正则表达式不在多维 JSON 字符串上

java - 正则表达式 - 匹配数字和特殊情况

java - 导入自定义 Java 类

java - 具有相同值的项目列表

android - Android 中的 Firebase 通知

regex - 检查 URL 协议(protocol)的正则表达式

java - 使用 java 处理 azure blob 的 StorageException