2012-02-14 94 views
2

嗨正在寻找其解析使用QueryString.Am下面的正则表达式的正则表达式:正则表达式解析的queryString

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

正则表达式是 “[\\?&](? [^&=] +)=(\\? [^&=] +)” – rkhm 2012-02-14 16:12:17

+0

有人可以帮助我的迫切 – rkhm 2012-02-14 16:12:44

+1

你确定你是否使用Java 7/JDK 1.7?因为它看起来像正则表达式引擎不识别命名的捕获组表示法。 – ruakh 2012-02-14 16:15:14

回答

5

的Java < 1.7不支持命名的组,以改变你的正则表达式:

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

,然后从匹配器,获取组#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)); 

OUTPUT:

name=[code], value=[1234] 
+0

没有这个不起作用 – rkhm 2012-02-14 16:30:35

+0

StringBuffer str1 = new StringBuffer(“http://test.abc.com/test/http/com/google/www/:/?code=1234&Id=123354455656”) ; – rkhm 2012-02-14 16:32:13

+0

我的网址就像上面的那样。可以帮助我.am因为找不到匹配而出错。 – rkhm 2012-02-14 16:32:53

0

回顾后表达式必须寻找一个固定长度的字符串。你不能使用正则表达式功能,如*? +里面的lookbehind断言。 (?<name>[^&=]+)是用'?'表示的倒影。 <',它包含一个'+'。也许你想评论'<'?使用