6

我通过说 request.queryString() 从 url 得到一个查询字符串 -

supplyId=123456789b&search=true

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

4

5 回答 5

7

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

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

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

supplyId=([^&]+)

确保关闭区分大小写。如果您使用第二种模式,您想要的值将在捕获组 1 中。

于 2012-05-17T19:34:47.587 回答
4

我认为你应该能够做这样的事情:

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

这应该打印:

供应ID=123456789b&search=true

supplyId=someValueIlike&search=true

于 2012-05-17T19:34:41.067 回答
2

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

perl -le '@m = ( "garbare=i123123123asdlfkjsaf&supplyId=123456789b&search=true" =~ /supplyId=(\d+\w+)&/g ); 为@m 打印

于 2012-05-17T19:58:30.927 回答
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

于 2012-08-24T11:21:03.510 回答
1
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"));
   }

}

于 2017-01-08T06:37:09.860 回答