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;
}
这段代码有点问题,像这样的正则表达式应该怎么写呀

解决方案 »

  1.   

    这个问题不需要使用正则一样OK啊。
    只需要从后数,找到最后一个问号即可。
    然后只取该URL下标从0至最后一个问号所在的下标的子串就行了。
      

  2.   

    想删除参数,为什么不一次性将?后面的内容全部替换掉呢?
    url = url.replaceAll("?.*","");
      

  3.   

    url = url.replaceAll("\\?.*","");
      

  4.   

    http://hi.csdn.net/space.php?do=home
    LZ是不是想得到http://hi.csdn.net/space.php ?那3楼正解
      

  5.   

    是这样的,比如我的url中N个参数,但是我想去掉其中的某几个,不是全部都去了
      

  6.   

    public static String removeParams(String url, String[] params) {
    String reg = null;
    for (int i = 0; i < params.length; i++) {
    reg = "(?<=[\\?&])" + params[i] + "=[^&]*&?";
    url = url.replaceAll(reg, "");
    }
    url = url.replaceAll("&+$", "");
    return url;
    }
      

  7.   

    public static String removeParams(String url, String[] params) {
            if(params != null && params.length > 0) {
                StringBuffer ps = new StringBuffer();
                ps.append("(");
    好规范
      

  8.   

    啊  7楼是我想要?<=[\\?&]  这个东西是什么?  我看不懂
      

  9.   


    (?<=something1)something2  ,表示匹配something2 ,但这个something2 有个前提就是它的前面(不是前部)有个something1  
    比如 abcbc   用(?<=a)bc           只能匹配第一个 bc 而不能匹配第二个bc 
      

  10.   


    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;
       
    }嘿嘿,改进一下
      

  11.   

    零宽断言的一种,匹配 params[i] 前面出现的是 ? 或 &
      

  12.   

    thankyou 10楼
     谁能告诉我,我刚开始贴的咋个就不行叻 郁闷
      

  13.   

    ?<=[\\?&]  这个断言,貌似不会被替换掉,哪位大侠有学习正则的好资料啊
      

  14.   

    我看过的唯一的正则表达式资料,要深入就在CSDN上面学吧
    http://deerchao.net/tutorials/regex/regex.htm
      

  15.   

    还要注意JAVA、JAVASCRIPT、C#这些语言,解释正则的差异
      

  16.   

    楼主能不能举一个实例
    把URL写出来 然后结果写出来。
    我想知道这个正则效果