正则表达式替换查询参数中的值

时间:2012-05-17 19:27:51

标签: java regex

我通过将request.queryString()称为 -

从url获取查询字符串
supplyId=123456789b&search=true

我想用新值替换“supplyId”的值。 “supplyId”可以位于查询字符串中的任意位置。这个可能的正则表达式是什么?

5 个答案:

答案 0 :(得分:6)

我实际上不会使用正则表达式,而是使用字符串操作。在URL中搜索“supplyId =”的位置,然后抓取所有内容直到字符串的结尾或“&”,以先到者为准。

如果必须使用正则表达式,请尝试以下方法之一:

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

supplyId=([^&]+)

确保区分大小写。如果使用第二个模式,则所需的值将位于捕获组1中。

答案 1 :(得分: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&amp; search = true

     

supplyId = someValueIlike&安培;搜索=真

答案 2 :(得分:2)

在perl你可以做这样的事情。

perl -le'@ m =(“garbare = i123123123asdlfkjsaf&amp; supplyId = 123456789b&amp; search = true”=〜/ supplyId =(\ d + \ w +)&amp; / g);打印@m

答案 3 :(得分: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

答案 4 :(得分: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"));
   }

}