request.queryString()と言うことでURLからクエリ文字列を取得します-
supplyId=123456789b&search=true
「supplyId」の値を新しい値に置き換えたい。「supplyId」は、クエリ文字列の任意の位置に配置できます。これに対して可能な正規表現は何でしょうか?
これには実際には正規表現を使用しませんが、文字列操作を使用します。URL で「supplyId=」の位置を検索し、文字列の末尾または「&」のいずれか早い方まですべてを取得します。
正規表現を使用する必要がある場合は、次のいずれかを試してください。
(?<=supplyId=)[^&]+
supplyId=([^&]+)
大文字と小文字の区別がオフになっていることを確認してください。2 番目のパターンを使用する場合、必要な値はキャプチャ グループ 1 に含まれます。
次のようなことができるはずだと思います:
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&search=true
supplyId=someValueIlike&search=true
perlでは、このようなことができます。
perl -le '@m = ( "garbare=i123123123asdlfkjsaf&supplyId=123456789b&search=true" =~ /supplyId=(\d+\w+)&/g ); @m の印刷
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
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"));
}
}