Java特殊字符RegEx



我想在Java中使用正则表达式实现以下目标

String[] paramsToReplace = {"email", "address", "phone"};
//input URL string
String ip = "http://www.google.com?name=bob&email=okATtk.com&address=NYC&phone=007";
//output URL string
String op = "http://www.google.com?name=bob&email=&address=&phone=";

URL可以包含特殊字符,如%

试试这个表达式:(email=)[^&]+(将email替换为您的数组元素)并替换为组:input.replaceAll("("+ paramsToReplace[i] + "=)[^&]+", "$1");

 String input = "http://www.google.com?name=bob&email=okATtk.com&address=NYC&phone=007";
 String output = input;
 for( String param : paramsToReplace ) {
   output = output.replaceAll("("+ param + "=)[^&]+", "$1");
 }

对于上面的例子。你可以使用split

String[] temp = ip.split("?name=")[1].split("&")[0];
op = temp[0] + "?name=" + temp[1].split("&")[0] +"&email=&address=&phone=";

像这样?

private final static String REPLACE_REGEX = "=.+\&";
ip=ip+"&";
for(String param : paramsToReplace) {
    ip = ip.replaceAll(param+REPLACE_REGEX, Matcher.quoteReplacement(param+"=&"));
}

注:这只是一个概念,我没有编译这个代码。

你不需要正则表达式来实现:

String op = ip;
for (String param : paramsToReplace) {
    int start = op.indexOf("?" + param);
    if (start < 0)
        start = op.indexOf("&" + param);
    if (start < 0)
        continue;
    int end = op.indexOf("&", start + 1);
    if (end < 0)
        end = op.length();
    op = op.substring(0, start + param.length() + 2) + op.substring(end);
}

最新更新