Неизвестная группа поиска рядом с индексом в Java 8 для именованного регулярного выражения grouop - PullRequest
0 голосов
/ 02 марта 2019

У меня есть шаблон, который я пытаюсь проанализировать в 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)

1 Ответ

0 голосов
/ 02 марта 2019

Кажется, в вашем регулярном выражении есть две проблемы.

  • Во-первых, в именованной группе перед sellerOfferId есть нежелательный пробел.
  • Во-вторых, отсутствует ) в конце, чтобы сделать круглые скобки сбалансированными.

Как только вы исправите это, ваш паттерн больше не будет выдавать никаких ошибок.Попробуйте этот обновленный Java-код,

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

Теперь он больше не дает PatternSyntaxException.

...