gpt4 book ai didi

java - Java 正则表达式中撇号的位置

转载 作者:行者123 更新时间:2023-12-01 22:16:53 24 4
gpt4 key购买 nike

我试图查看日志模式布局是否具有时间戳/日期字段及其在布局中被空格分割时的位置。看来正则表达式中撇号的位置很重要。

例如当我有模式 .*%d[ate]*\\{([\\w\\.'-\\:]+)}.* 时它匹配格式 %X{IP} %X{field1} %X{field2} [%date{yyyy-MM-dd'T'HH:mm:ssZ} guid=%{guid} userId=%{userId} %msg%n 的布局。但是,当我交换-时和'在正则表达式中,我收到如下运行时错误。

Exception in thread "main" java.lang.ExceptionInInitializerError
Caused by: java.util.regex.PatternSyntaxException: Illegal character range near index 19
.*%d[ate]*\{([\w\.-'\:]+)}.*
^
at java.util.regex.Pattern.error(Pattern.java:1955)
at java.util.regex.Pattern.range(Pattern.java:2655)
at java.util.regex.Pattern.clazz(Pattern.java:2562)
at java.util.regex.Pattern.sequence(Pattern.java:2063)
at java.util.regex.Pattern.expr(Pattern.java:1996)
at java.util.regex.Pattern.group0(Pattern.java:2905)
at java.util.regex.Pattern.sequence(Pattern.java:2051)
at java.util.regex.Pattern.expr(Pattern.java:1996)
at java.util.regex.Pattern.compile(Pattern.java:1696)
at java.util.regex.Pattern.<init>(Pattern.java:1351)
at java.util.regex.Pattern.compile(Pattern.java:1028)

如果您能解释撇号位置的重要性,这确实有助于更好地理解正则表达式的概念。

最佳答案

您似乎在字符类中转义了错误的字符。请注意,在字符类/集 [..] 内部,- 字符用于创建字符范围,例如 a-z。但是 .-' 不是正确的范围,因为 Unicode 表中 . 的索引大于 Unicode 表中 ' 的索引(就像 z-a 无效)。

要使 - 简单文字,可以使用 "\\-" 对其进行转义,或者将其放置在无法被解释为范围一部分的位置,例如在字符类的开始/结束处([-...] [...-])或之后其他范围,例如 [a-z-1] (代表 a-z 范围、或 -1)。

此外,您不需要在字符类中转义 .:

关于java - Java 正则表达式中撇号的位置,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30816398/

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