我試圖解析(Java)自定義GET樣式請求,並且我想通過正則表達式來實現。
該請求的格式如下:自定義'HTTP GET樣式'請求的正則表達式
GET myCommand?parameter1=value¶meter2=value¶meter3=value¶meter4=value
則params的數目是可變的,但需要至少一個PARAM。
有人可以幫助我這個正則表達式嗎?
我試圖解析(Java)自定義GET樣式請求,並且我想通過正則表達式來實現。
該請求的格式如下:自定義'HTTP GET樣式'請求的正則表達式
GET myCommand?parameter1=value¶meter2=value¶meter3=value¶meter4=value
則params的數目是可變的,但需要至少一個PARAM。
有人可以幫助我這個正則表達式嗎?
這裏是如何給它的所有分析到使用4行的Java變量:在輸入順序使用LinkedHashMap
迭代
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]);
注意。
下面是使用你的輸入(修改一點點地有不同的值)一個小測試:
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]+
,並根據需要通過您所選擇的語言逃避,你應該是好去。
你所說的「解析」是什麼意思?你的意思是提取命令名稱和名稱/值對分別作爲單獨的數據片段? – Bohemian 2013-02-13 11:54:15
爲什麼不使用查詢字符串庫和布爾表達式等來驗證它? 會是更簡潔更可擴展的解決方案。 – Viehzeug 2013-02-13 11:55:27
@Bohemian:是的,這正是我想要做的 – user2060677 2013-02-13 14:01:27