1

カスタム GET スタイルのリクエストを解析 (Java) しようとしていますが、正規表現を使用してそれを実行したいと考えています。
リクエストは次のようにフォーマットされます。

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

パラメータの数は可変ですが、少なくとも 1 つのパラメータが必要です。

誰かがこの正規表現で私を助けることができますか?

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]);

LinkedHashMapa を使用すると、入力順に反復されることに注意してください。

入力を使用した小さなテストを次に示します (個別の値を持つように少し変更されています)。

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 に答える