2011-12-12 94 views
1

我想要实现在Java中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中使用正则表达式以下可以包含特殊字符,如%

回答

0

对于上面的示例。您可以使用拆分

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

试试这个表达式:(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"); 
} 
+0

如下这将返回不正确的输出:http://www.google.com?name=bob&email=& – user1093296

+0

@ user1093296我不t看到任何不正确的输入。你能指定吗?在我的测试中,我得到了'http://www.google.com?name = bob&email =&address =&phone =',就像您在文章中所要求的一样。 – Thomas

+0

http://www.google.com?name=bob&email=& – user1093296

0

像这样的事情?

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

P.S.这只是一个概念,我没有编译这个代码。

0

你不需要正则表达式来实现这一目标:

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); 
} 
+0

感谢您的回答。它适用于大多数情况。但是它会给以下情况提供错误的输出:String [] paramsToReplace = {“email”,“address”,“phone”}; String ip =“http://www.google.address?name=bob&[email protected]&address=NYC&phone=007”; – user1093296

+0

@ user1093296:我应该想到这一点。 :$更新了答案。 – flesk