用于解析queryString的正则表达式

时间:2012-02-14 16:09:57

标签: java regex

您正在寻找使用以下正则表达式解析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 个答案:

答案 0 :(得分:5)

Java&lt; 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));

<强>输出:

name=[code], value=[1234]

答案 1 :(得分:0)

我不知道你要用"%5b^&=%5d+">完成什么。听起来像是抱怨>。这有助于:http://stevenbenner.com/2010/03/javascript-regex-trick-parse-a-query-string-into-an-object/

答案 2 :(得分:0)

Lookbehind表达式必须查找固定长度的字符串。你不能使用*等正则表达式功能? +里面的lookbehind断言。 (?<name>[^&=]+)是由&#39;?&lt;&#39;表示的后视镜。它包含一个&#39; +&#39;。也许您想要评论&#39;&lt;&#39;?