首页 > 解决方案 > Java 8中索引附近的未知后视组,用于命名正则表达式组

问题描述

我有一个试图在 Java 8 中解析的模式,但我不知道我做错了什么。我正在尝试创建命名的分组正则表达式。蚂蚁帮助将不胜感激。

public class Test {
    public static void main(String[] args) {
        String p = ".*(/p/(?<listingId>[a-zA-Z0-9\\-].*)/(?< sellerOfferId>[a-zA-Z0-9\\-])(/)?$";
        Pattern.compile(p);
    }
}

这会引发错误

Exception in thread "main" java.util.regex.PatternSyntaxException: Unknown look-behind group near index 66
.*(/p/(?<listingId>[a-zA-Z0-9\-].*)/(?< sellerOfferId>[a-zA-Z0-9\-])(/)?$
                                                                  ^
    at java.util.regex.Pattern.error(Pattern.java:1924)
    at java.util.regex.Pattern.group0(Pattern.java:2829)
    at java.util.regex.Pattern.sequence(Pattern.java:2018)
    at java.util.regex.Pattern.expr(Pattern.java:1964)
    at java.util.regex.Pattern.group0(Pattern.java:2854)
    at java.util.regex.Pattern.sequence(Pattern.java:2018)
    at java.util.regex.Pattern.expr(Pattern.java:1964)
    at java.util.regex.Pattern.compile(Pattern.java:1665)
    at java.util.regex.Pattern.<init>(Pattern.java:1337)
    at java.util.regex.Pattern.compile(Pattern.java:1022)
    at com.myproject.test.Test.main(Test.java:9)

标签: regexjava-8regex-group

解决方案


您的正则表达式似乎有两个问题。

  • sellerOfferId首先,在命名组之前有一个不需要的空间。
  • )其次,末尾缺少一个使括号平衡的地方。

一旦你解决了这个问题,你的 Pattern 就不再给出任何错误。试试这个更新的 Java 代码,

String p = ".*(/p/(?<listingId>[a-zA-Z0-9\\-].*)/(?<sellerOfferId>[a-zA-Z0-9\\-])(/)?$)";
                                                    ^ removed space here              ^ put this missing )
Pattern.compile(p);

现在它不再给PatternSyntaxException.


推荐阅读