2013-02-13 78 views
1

我試圖解析(Java)自定義GET樣式請求,並且我想通過正則表達式來實現。
該請求的格式如下:自定義'HTTP GET樣式'請求的正則表達式

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

則params的數目是可變的,但需要至少一個PARAM。

有人可以幫助我這個正則表達式嗎?

+0

你所說的「解析」是什麼意思?你的意思是提取命令名稱和名稱/值對分別作爲單獨的數據片段? – Bohemian 2013-02-13 11:54:15

+2

爲什麼不使用查詢字符串庫和布爾表達式等來驗證它? 會是更簡潔更可擴展的解決方案。 – Viehzeug 2013-02-13 11:55:27

+0

@Bohemian:是的,這正是我想要做的 – user2060677 2013-02-13 14:01:27

回答

3

這裏是如何給它的所有分析到使用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&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} 
0

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

現在只是有效標識符與有效值正則表達式正則表達式,.+更換[a-z0-9]+,並根據需要通過您所選擇的語言逃避,你應該是好去。