2012-05-17 50 views
3

我說的Request.QueryString()爲得到URL查詢字符串 -正則表達式替換查詢參數的值

supplyId=123456789b&search=true 

我想用一個新的替換值「supplyId」值。 「supplyId」可以在查詢字符串中的任何位置。可能的正則表達式是什麼?

+1

爲什麼要使用正則表達式時,你知道你的分隔符是什麼樣子? – 2012-05-17 19:33:44

回答

4

我實際上不會使用正則表達式來處理此操作,而是使用字符串操作。在URL中搜索「supplyId =」的位置,然後抓住所有內容,直到字符串的末尾或「&」,以先到者爲準。

如果必須使用正則表達式,請嘗試以下之一:

(?<=supplyId=)[^&]+ 

supplyId=([^&]+) 

確認大小寫是關閉的。如果你使用第二種模式,你想要的值將在捕獲組1中。

+1

grt。謝謝,這是行得通的。 :) – Saurabh

+0

如果value爲:abcdsupplyId = value – djmj

+0

@djmj - 這應該不是問題,因爲'='左側的字符串是參數名稱。你可以給你的其他參數名稱不要以'supplyid'結尾。但只是爲了好玩,你可以通過在開頭添加'\ b'來解決:'(?<= \ bsupplyId =)[^&] +'或'\ bsupplyId =([^&] +)' –

3

我想你應該能夠做到像這樣:

String queryString = "supplyId=123456789b&search=true"; 
String anyStringIlike = "someValueIlike"; 
String newQueryString = queryString.replaceAll("supplyId=[^&]+","supplyId=" + anyStringIlike); 
System.out.println(queryString); 
System.out.println(newQueryString); 

這應該打印:

supplyId = 123456789b &搜索=真

supplyId = someValueIlike &搜索= true

+1

如果value是:'abcdsupplyId = value',會發生什麼? – djmj

2

在Perl中你可以做這樣的事情。

的perl -le「@m =( 「garbare = i123123123asdlfkjsaf & supplyId = 123456789b &搜索=真」=〜/ supplyId =(\ d + \ W +)& /克);對於打印@m

1
public static String updateQueryString (String queryString, String name, String value) { 
if (queryString != null) { 
     queryString = queryString.replaceAll(name + "=.*?($|&)", "").replaceFirst("&$", ""); 
    } 
return addParameter(queryString, name, value); 
} 

public static String addParameter(queryString, name, value) {  
    return StringUtils.isEmpty(queryString) ? (name + "=" + value) : (queryString + "&" + name + "=" + value); 

} 

你叫這樣的:updateQueryString("supplyId=123456789b&search=true", "supplyId", "newValue");

輸出:search=true&supplyId=newValue

0
public class TestQueryStringValReplace {  
    public static String replace(String queryString, String propName, String newVal) { 
     return queryString.replaceAll(propName+"=[^&]+", propName+"=" + newVal); 
    } 

    public static void main(String[] args) { 
     Assert.assertEquals("supplyId=newVal&search=true", replace("supplyId=oldVal&search=true", "supplyId","newVal")); 
     Assert.assertEquals("supplyId=newVal", replace("supplyId=oldVal", "supplyId","newVal")); 
     Assert.assertEquals("search=true&supplyId=newVal&3rdprop=val", replace("search=true&supplyId=oldVal&3rdprop=val", "supplyId","newVal")); 
    } 

}