gpt4 book ai didi

java - 模式编译错误

转载 作者:搜寻专家 更新时间:2023-11-01 08:05:22 24 4
gpt4 key购买 nike

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

原始模式是

  1. (^[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,})
  2. (^[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,})

第一个是匹配

-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,})");
  2. >
    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,})

最佳答案

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

 [\\[a-z_]

某些正则表达式实现不需要 [ 在字符类中进行转义,但 java 需要,因为“字符类可能出现在其他字符类中”。参见 Character class subtractiondocs .

顺便说一句,您可以通过将所有 [0-9] 替换为 \\d 并删除 \\t 从所有 [\\t,\\s] 中,因为 \\s 也匹配制表符,并从字符类中删除所有逗号,例如[-,r,w,x] 应该是 [-rwx]

如果您不担心匹配不区分大小写,您可以将所有 [a-z0-9_] 替换为 \\w

编辑

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

关于java - 模式编译错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15055534/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com