public static String removeParams(String url, String[] params) {
if(params != null && params.length > 0) {
StringBuffer ps = new StringBuffer();
ps.append("(");
for(int i = 0; i < params.length; i++) {
ps.append(params[i]).append("|");
}
ps.deleteCharAt(ps.length() - 1);
ps.append(")");
Pattern pattern = Pattern.compile("(&|\\?)" + ps.toString() + "=[^&]*&?");
Matcher matcher = pattern.matcher(url);
if(matcher.find()) {
url = matcher.replaceAll("$1");
}
return url;
}
return url;
}
这段代码有点问题,像这样的正则表达式应该怎么写呀
只需要从后数,找到最后一个问号即可。
然后只取该URL下标从0至最后一个问号所在的下标的子串就行了。
url = url.replaceAll("?.*","");
LZ是不是想得到http://hi.csdn.net/space.php ?那3楼正解
String reg = null;
for (int i = 0; i < params.length; i++) {
reg = "(?<=[\\?&])" + params[i] + "=[^&]*&?";
url = url.replaceAll(reg, "");
}
url = url.replaceAll("&+$", "");
return url;
}
if(params != null && params.length > 0) {
StringBuffer ps = new StringBuffer();
ps.append("(");
好规范
(?<=something1)something2 ,表示匹配something2 ,但这个something2 有个前提就是它的前面(不是前部)有个something1
比如 abcbc 用(?<=a)bc 只能匹配第一个 bc 而不能匹配第二个bc
public static String removeParams(String url, String[] params) {
String reg = null;
StringBuffer ps = new StringBuffer();
ps.append("(");
for(int i = 0; i < params.length; i++) {
ps.append(params[i]).append("|");
}
ps.deleteCharAt(ps.length() - 1);
ps.append(")");
reg = "(?<=[\\?&])" + ps.toString() + "=[^&]*&?";
url = url.replaceAll(reg, "");
url = url.replaceAll("(\\?|&+)$", "");
return url;
}嘿嘿,改进一下
谁能告诉我,我刚开始贴的咋个就不行叻 郁闷
http://deerchao.net/tutorials/regex/regex.htm
把URL写出来 然后结果写出来。
我想知道这个正则效果