Регулярное выражение для разбора queryString - PullRequest
2 голосов
/ 14 февраля 2012

Привет, я ищу регулярное выражение, которое анализирует QueryString.Am, используя приведенное ниже регулярное выражение:

Pattern pr1=Pattern.compile("[\\?&](?<name>[^&=]+)=(?<value>[^&=]+)");

Но его бросок

java.util.regex.PatternSyntaxException: Look-behind group does not have an obvious maximum length near index 18
[\?&](?<name>[^&=]+)=(?<value>[^&=]+)
                  ^

Может ли кто-нибудь помочь мне на

Ответы [ 3 ]

5 голосов
/ 14 февраля 2012

Java <1.7 не поддерживает именованные группы, поэтому измените свое регулярное выражение на: </p>

Pattern pr1 = Pattern.compile("[\\?&]([^&=]+)=([^&=]+)");

, а затем из Matcher получите группу # 1 и # 2 для имени и значения.

Обновление:

String str =
        "http://test.abc.com/test/http/com/google/www/:/?code=1234&Id=123354455656%22";
Pattern pt = Pattern.compile("[\\?&]([^&=]+)=([^&=]+)");
Matcher m = pt.matcher(str);
if (m.find())
    System.out.printf("name=[%s], value=[%s]%n", m.group(1), m.group(2));

ВЫХОД:

name=[code], value=[1234]
0 голосов
/ 30 ноября 2015

Выражение Lookbehind должно искать строку фиксированной длины.Вы не можете использовать функции регулярных выражений, такие как *?+ внутри взгляд за утверждениями.(?<name>[^&=]+) - это вид сзади, обозначаемый знаком «? <» И содержащий «+».Может быть, вы хотели закомментировать '<'? </p>

0 голосов
/ 14 февраля 2012

Я не знаю, чего вы пытаетесь достичь с "%5b^&=%5d+">. Похоже, он жалуется на >. Это может помочь: http://stevenbenner.com/2010/03/javascript-regex-trick-parse-a-query-string-into-an-object/

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...