2012-02-14 3 views
2

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

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>[^&=]+) 
       ^

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

+0

Regex используется "[\\? &] (? [^ & =] +) = (\\? [^ & =] +)" – rkhm

+0

Может кто-то помочь мне его срочно – rkhm

+1

Вы уверены, что вы используя Java 7/JDK 1.7? Поскольку это выглядит так, что регулярное выражение не распознает именованную запись группы захвата. – ruakh

ответ

5

< Java 1.7 не поддерживает именованные группы, чтобы изменить регулярное выражение:

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

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

Update:

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

Нет, это не работает – rkhm

+0

StringBuffer str1 = new StringBuffer ("http://test.abc.com/test/http/com/google/www/:/?code=1234&Id=123354455656") ; – rkhm

+0

Мой url похож на приведенный выше one.can u help me.am получить сообщение по ошибке не найдено – rkhm

0

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

Смежные вопросы