1

我正在尝试解析(Java)自定义 GET 样式请求,我想通过正则表达式来做到这一点。
请求的格式如下:

GET myCommand?parameter1=value&parameter2=value&parameter3=value&parameter4=value

参数的数量是可变的,但至少需要一个参数。

有人可以帮我解决这个正则表达式吗?

4

3 回答 3

3

以下是如何使用 4 行将其全部解析为 java 变量:

String command = input.replaceAll("(^\\w+ )|(\\?.*)", "");
Map<String, String> params = new LinkedHashMap<String, String>();
for (String pair : input.replaceFirst(".*?\\?", "").split("&"))
    params.put(pair.split("=")[0], pair.split("=")[1]);

请注意,使用 aLinkedHashMap以输入顺序进行迭代。

这是使用您的输入进行的一个小测试(稍作修改以具有不同的值):

public static void main(String[] args) throws Exception {
    String input = "GET myCommand?parameter1=value1&parameter2=value2&parameter3=value2&parameter4=value4";
    String command = input.replaceAll("(^\\w+ )|(\\?.*)", "");
    Map<String, String> params = new LinkedHashMap<String, String>();
    for (String pair : input.replaceFirst(".*?\\?", "").split("&"))
        params.put(pair.split("=")[0], pair.split("=")[1]);
    System.out.println("Command=" + command);
    System.out.println("Params=" + params);
}

输出:

Command=myCommand
Params={parameter1=value1, parameter2=value2, parameter3=value2, parameter4=value4}
于 2013-02-14T02:32:40.887 回答
0

GET myCommand\?([a-z0-9]+)=(.+)(&([a-z0-9]+)=(.+))*

现在只需[a-z0-9]+用正则表达式替换有效标识符,.+用正则表达式替换有效值,并根据您选择的语言的要求进行转义,您应该一切顺利。

于 2013-02-13T11:59:11.227 回答
0

以下是适用于任何带有查询参数的请求 URL 的正则表达式:.+?(\?((\w+?=.+?)&)*\w+?=.+)?$

.+?是查询参数之前的匹配字符串。让我们打破正则表达式:(\?((\w+?=.+?)&)*\w+?=.+)?

((\w+?=.+?)&)*表示零个或多个键值对 join with&
\w+?=.+表示最后一个键值对

希望这可以帮助。如果您需要更多帮助,请告诉我。

于 2018-06-27T07:02:55.480 回答