java - 在正则表达式中使用命名组会导致 "Lookbehind doesn' t 有明显的最大长度“错误

标签 java regex java-6

我有一些像这样的日志文件文本:

21.125.155.111 - - [01/Jan/2012:12:07:48 +0530] "GET/digital-cameras/digital-camera/sony-qx-dsc-qx100-point-shoot-digital -camera-black.html HTTP/1.1"200 1470 "Mozilla/5.0 (Windows; U; Windows NT 6.1; en-US; rv:1.9.2.17) Gecko/20110420 Firefox/3.6.17""-"

我的模式是:

"(?<ip>[\\d\\.]+)(.+)\\\"(?<verb>\\w+) (?<address>.+) (?<protocol>[HTTPS]+)/(?<version>.+?)\\\"\\s(?<status>\\d+)\\s(?<time>\\d+)\\s\\\"(?<useragent>.*)\\\"\\s(.*)"

但是当我尝试编译该模式时,我得到了上述 PatternSyntaxException。

它在 C# 中完美运行,但在 Java 1.6 中给出异常。

最佳答案

您遇到的是一个 Java 错误,该错误会产生错误的错误消息。 Java 6 不支持命名组,因此当正则表达式编译器看到 (?< 时,它会跳出这样的结论:您正在尝试创建一个后视。它应该等到它再读取一个字符后再执行任何操作,并且如果下一个字符不是=! ,它应该抛出一个异常并提供更一般的解释,例如“未知的组构造”。

但是问题的解决方案是升级到 Java 7,或者使用老式编号组而不是命名类型。

关于java - 在正则表达式中使用命名组会导致 "Lookbehind doesn' t 有明显的最大长度“错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30465525/

相关文章:

java - 安全 AJP 连接器不呈现

java - android中的堆栈 Activity

java - resourceIdMatches() 在 Appium UiSelector 中不起作用

php - preg_match_all ,获取所有包含字符串的 img 标签

java - 是否可以使用可在 Java 6 JVM 上运行的 Java 7 SDK 编译类文件?

java - Android Views 的 WeakReference 安全吗?

java - 获取 Java 中所有出现的二元组

regex - 使用 REGEX 查找包装内容中的换行符

java - 从 java 1.5 移至 java 1.6.0_25 后,JVM 在负载下崩溃

java - Java 字节码在同一版本的 Java 的不同更新中是否兼容?