当前位置: 首页 > 知识库问答 >
问题:

模式编译错误

戚育
2023-03-14

我在RegexBuddy中创建了两个模式来编译ls-l输出,但在Android模式中,compile给了我一个错误。在Java7中,它编译得很好。

原始图案是

  1. [1,[1[a-z[a-z[a-z[a-z[a-z[a-z[a-z[a-ZUU[a-z[a-z[a-z[a-z[a-z[a-z[a-z[a-z[a-z[a-z[a-z[a-z[a-z[0-0-0-9[0-9[0-9[0-9[9[9[9[0,30[0,30[0,30}[0,30}[0,30}[0,30}[0,30}[0,30}[0,30}[0[0[0,30}[1,30}[1,30}[0-3[0,30[0-3[0,30}[0-3[0[0,10[0[0,10[0[0,10,30}[1,10[1,10[0[0,10[0 9]{1,2}\s[0-9]{2}:[0-9]{2}][\t\s]{1,}(.{1,})

第一种是用来配对的

-rwxr-xr-x  1 doctor users    399 2011-11-11 13:33 shot.s

或者

-rwxr-xr-x  1 100 100    399 2011-11-11 13:33 file.txt

第二个是匹配

用于匹配

-rwxr-xr-x  1 doctor users    399 Nov 22  2011 shot.s

或者

-rwxr-xr-x  1 100 100    399 Nov 22 13:33 shot.s

代码:

  1. private static final Pattern LS_L =
        Pattern.compile("(^[l,d,-][-,r,w,x]{9})[\\t,\\s]{1,}([[a-z_][a-z0-9_]{0,30}|[0-9]{1,})[\\t,\\s]{1,}([[a-z_][a-z0-9_]{0,30}|[0-9]{1,})[\\t,\\s]{1,}([0-9]{0,})[\\t,\\s]{1,}([0-9]{4}-[0-9]{1,2}-[0-9]{1,2}\\s[0-9]{2}:[0-9]{2})[\\t,\\s]{1,}(.{1,})");
    
    private static final Pattern LS_L_1 =
        Pattern.compile("(^[l,d,-][-,r,w,x]{9})[\\t,\\s]{1,}[0-9]{1,}[\\t,\\s]{1,}([[a-z_][a-z0-9_]{0,30}|[0-9]{1,})[\\t,\\s]{1,}([[a-z_][a-z0-9_]{0,30}|[0-9]{1,})[\\t,\\s]{1,}([0-9]{0,})[\\t,\\s]{1,}(\\w{3}\\s[0-9]{1,2}[\\t,\\s]{1,}([0-9]{1,2}:[0-9]{2}|[0-9]{4}))[\\t,\\s]{1,}(.{1,})");
    

    第一个投掷

    02-24 21:14:21.854: E/AndroidRuntime(3072): Caused by: java.util.regex.PatternSyntaxException: Missing closing bracket in character class near index 219:
    02-24 21:14:21.854: E/AndroidRuntime(3072): (^[l,d,-][-,r,w,x]{9})[\t,\s]{1,}([[a-z_][a-z0-9_]{0,30}|[0-9]{1,})[\t,\s]{1,}([[a-z_][a-z0-9_]{0,30}|[0-9]{1,})[\t,\s]{1,}([0-9]{0,})[\t,\s]{1,}([0-9]{4}-[0-9]{1,2}-[0-9]{1,2}\s[0-9]{2}:[0-9]{2})[\t,\s]{1,}(.{1,})
    02-24 21:14:21.854: E/AndroidRuntime(3072):                                                                                                                                                                                                                            ^
    02-24 21:14:21.854: E/AndroidRuntime(3072):     at java.util.regex.Pattern.compileImpl(Native Method)
    02-24 21:14:21.854: E/AndroidRuntime(3072):     at java.util.regex.Pattern.compile(Pattern.java:400)
    02-24 21:14:21.854: E/AndroidRuntime(3072):     at java.util.regex.Pattern.<init>(Pattern.java:383)
    02-24 21:14:21.854: E/AndroidRuntime(3072):     at java.util.regex.Pattern.compile(Pattern.java:374)
    

    第二个给了我

    02-24 21:00:24.166: E/AndroidRuntime(1366): Caused by: java.util.regex.PatternSyntaxException: Missing closing bracket in character class near index 250:
    02-24 21:00:24.166: E/AndroidRuntime(1366): (^[l,d,-][-,r,w,x]{9})[\t,\s]{1,}[0-9]{1,}[\t,\s]{1,}([[a-z_][a-z0-9_]{0,30}|[0-9]{1,})[\t,\s]{1,}([[a-z_][a-z0-9_]{0,30}|[0-9]{1,})[\t,\s]{1,}([0-9]{0,})[\t,\s]{1,}(\w{3}\s[0-9]{1,2}[\t,\s]{1,}([0-9]{1,2}:[0-9]{2}|[0-9]{4}))[\t,\s]{1,}(.{1,})
    

共有2个答案

谭池暝
2023-03-14

除了@Mike所说的:

  1. 将{1,}替换为
晁绍辉
2023-03-14

对我来说,这个错误是通过转义[[a-z_]字符类中的[而消除的——每个正则表达式中有两个。

 [\\[a-z_]

一些正则表达式实现不需要在字符类中转义[,但java需要转义,因为“字符类可能出现在其他字符类中”。请参阅字符类减法和文档。

顺便说一下,您可以通过将所有的[0-9]替换为\\d并通过从所有的[\\t,\\s]中删除\\t来缩短正则表达式code>也匹配制表符,通过删除字符类中的所有逗号,例如[-, r, w, x]应该是[-rwx]

如果你不担心匹配不区分大小写,你可以用\\w替换所有的[a-z0-9

编辑

再看一遍,似乎没有理由在字符类中使用[,所以[[a-z_]应该是[a-z_]

 类似资料:
  • 我正在尝试使用以下正则表达式模式

  • 我正在尝试编译这里提到的桥接模式C示例代码 但是,当我使用g-o桥时,我会遇到编译错误。C 计划: 错误: ]#g-o桥桥。C桥。C: 在成员函数“virtual void TimeImp::tell()”中:Bridge。C: 14:错误:“运算符”不匹配 这是错误的一部分,它以相同的模式扩展。 我复制粘贴了相同的代码,分析了错误行,但无法得到它。 有人能告诉我我哪里错了吗?

  • 我只在Spring Boot项目中使用IntelliJ IDE。请注意,我没有使用任何Kotlin项目。但是,今天,我在下面有一个错误。任何专业人士。请帮忙解决这个问题!谢谢,错误:Kotlin:模块是用不兼容的Kotlin版本编译的。其元数据的二进制版本为1.5.1,预期版本为1.1.13。

  • 问题内容: 这是一段Java代码: 它不编译,什么是概率?错误:该行上有多个标记;’bool’变量上的语法错误。我希望它能打印出来。虽然根据我的教程书可以打印。 我知道它会发生短路,但如果&&双方都需要进行评估,那不是家庭作业,我正在学习Java。干杯 问题答案: 等效于:- 由于被评估为,因此第二个表达式不被评估,因为在那里您使用了 短路运算符(||) 。 因此,最后两个任务不会发生。和值和保持

  • 问题内容: 当我在Netbeans中构建并运行程序时,它可以正常工作。但是当我尝试“ mvn compile”时,使用相同的pom.xml文件会出现以下错误: 我的Java版本不是1.3,这里是“ mvn -version”的结果 这是第53行: 问题答案: 问题是在Maven2中默认使用和 您可以通过将其添加到pom中来解决此问题: 将其放在最顶层的父pom中是很实际的,这样您派生的pom不需要

  • 我遇到了一个初学者的编译错误: 我的简单程序: 我尝试使用以下命令编译它: gcc-g-Wall-ansi launch_瓷砖。c-o tiles\u程序 并得到这些错误: 启动_tiles。c: 在函数“main”中: launch_tiles. c: 17:19:错误:预期')'之前';'令牌 launch_tiles. c: 17:19:错误:太少的参数函数'fget' /usr/inclu