カスタム GET スタイルのリクエストを解析 (Java) しようとしていますが、正規表現を使用してそれを実行したいと考えています。
リクエストは次のようにフォーマットされます。
GET myCommand?parameter1=value¶meter2=value¶meter3=value¶meter4=value
パラメータの数は可変ですが、少なくとも 1 つのパラメータが必要です。
誰かがこの正規表現で私を助けることができますか?
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]);
LinkedHashMap
a を使用すると、入力順に反復されることに注意してください。
入力を使用した小さなテストを次に示します (個別の値を持つように少し変更されています)。
public static void main(String[] args) throws Exception {
String input = "GET myCommand?parameter1=value1¶meter2=value2¶meter3=value2¶meter4=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}
GET myCommand\?([a-z0-9]+)=(.+)(&([a-z0-9]+)=(.+))*
[a-z0-9]+
有効な識別子を正規表現に置き換え、有効な値を正規表現に置き換え.+
、選択した言語の必要に応じてエスケープするだけで、準備完了です。