我通过将request.queryString()称为 -
从url获取查询字符串supplyId=123456789b&search=true
我想用新值替换“supplyId”的值。 “supplyId”可以位于查询字符串中的任意位置。这个可能的正则表达式是什么?
答案 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"));
}
}