2014-07-16 66 views
1

我有一个查询字符串,删除请求参数可能是:从查询字符串

/fr/hello?language=en 

/fr/welcome?param1=222&param2=aloa&language=en 

/it/welcome?param1=222&language=en&param2=aa 

我想从每个查询字符串中删除参数语言及其值,因此结果将为:

/fr/hello 

/fr/welcome?param1=222&param2=aloa 

/it/welcome?param1=222&param2=aa 

编辑:所述参数的值的长度可以是大于2

是否有人知道任何良好的正则表达式表达在使用String.replaceAll([regex],[replace])?

+0

感谢,刚刚更新后 – daniele

+0

没有,它不会在我的情况下工作,很明显,我已经取代“富”与“语言” – daniele

+0

奇怪的是它不匹配 – daniele

回答

6

使用下面的正则表达式,并用空字符串替换匹配的字符串,

[&?]language.*?(?=&|\?|$) 

DEMO

示例代码:

String s1 = "/fr/welcome?param1=222&param2=aloa&language=en"; 
String s2 = "/fr/welcome?language=en"; 
String s3 = "/fr/welcome?param1=222&language=en&param2=aa"; 
String m1 = s1.replaceAll("[&?]language.*?(?=&|\\?|$)", ""); 
String m2 = s2.replaceAll("[&?]language.*?(?=&|\\?|$)", ""); 
String m3 = s3.replaceAll("[&?]language.*?(?=&|\\?|$)", ""); 
System.out.println(m1); 
System.out.println(m2); 
System.out.println(m3); 

输出:

/fr/welcome?param1=222&param2=aloa 
/fr/welcome 
/fr/welcome?param1=222&param2=aa 

IDEONE 1IDEONE 2

+0

我可以不明白为什么我在我的代码中不匹配:queryString.replaceAll(“[&?] language。*?(?=&| \\?| $)”,“”); – daniele

+0

请参阅ideone链接。这个对我有用。 –

+0

但它不适用于此:/ en/welcome?language = en – daniele

1

这个规则表达式应该可以帮助您:

"language=\\w{2}" 
+0

长度不一定2 – daniele

5

你可以使用regexreplaceAll()

public static void main(String[] args) { 
    String s1 = "/fr/welcome?language=en"; 
    String s2 = "/fr/welcome?param1=222&param2=aloa&language=en"; 
    String s3 = "/fr/welcome?param1=222&language=en&param2=aa"; 
    String pattern = "[?&]language=.{2}"; // use pattern = "([?&]language=\\w+)"; for more than 2 letters after language ==. 
    System.out.println(s1.replaceAll(pattern, "")); 
    System.out.println(s2.replaceAll(pattern, "")); 
    System.out.println(s3.replaceAll(pattern, "")); 
} 

O/P:

/fr/welcome 
/fr/welcome?param1=222&param2=aloa 
/fr/welcome?param1=222&param2=aa 
1

我想从每个查询字符串参数语言 有它的价值,除去...

您可以使用replaceAll

String s="/fr/welcome?language=en"; 
s=s.replaceAll("(\\?|&)language=\\w+", ""); 
  • (\\?|&)组将匹配?&
  • \\w+将匹配的一个或多个单词字符
0

这将适当地除去任何参数,即使它被放置多于一个(对于example =“/ fr/welcome?language = en & param1 = 222 & param2 = aloa”)

public String removeParamFromUrl(final String url, final String param) { 
    if (StringUtils.isNotBlank(url)) { 
     return url.replaceAll("&" + param + "=[^&]+", "") 
       .replaceAll("\\?" + param + "=[^&]+&", "?") 
       .replaceAll("\\?" + param + "=[^&]+", ""); 
    } else { 
     return url; 
    } 
}