clo*_*her 1 java regex string spring
我有一个查询字符串,可能是:
/fr/hello?language=en
Run Code Online (Sandbox Code Playgroud)
要么
/fr/welcome?param1=222¶m2=aloa&language=en
Run Code Online (Sandbox Code Playgroud)
要么
/it/welcome?param1=222&language=en¶m2=aa
Run Code Online (Sandbox Code Playgroud)
我想从每个查询字符串中删除参数语言及其值,因此结果将是:
/fr/hello
Run Code Online (Sandbox Code Playgroud)
和
/fr/welcome?param1=222¶m2=aloa
Run Code Online (Sandbox Code Playgroud)
和
/it/welcome?param1=222¶m2=aa
Run Code Online (Sandbox Code Playgroud)
编辑:参数值的长度可能大于2
有没有人知道在String.replaceAll([regex],[replace])中使用的任何好的正则表达式?
使用下面的正则表达式并用空字符串替换匹配的字符串,
[&?]language.*?(?=&|\?|$)
Run Code Online (Sandbox Code Playgroud)
示例代码:
String s1 = "/fr/welcome?param1=222¶m2=aloa&language=en";
String s2 = "/fr/welcome?language=en";
String s3 = "/fr/welcome?param1=222&language=en¶m2=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);
Run Code Online (Sandbox Code Playgroud)
输出:
/fr/welcome?param1=222¶m2=aloa
/fr/welcome
/fr/welcome?param1=222¶m2=aa
Run Code Online (Sandbox Code Playgroud)
你可以使用regex与replaceAll()
public static void main(String[] args) {
String s1 = "/fr/welcome?language=en";
String s2 = "/fr/welcome?param1=222¶m2=aloa&language=en";
String s3 = "/fr/welcome?param1=222&language=en¶m2=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, ""));
}
Run Code Online (Sandbox Code Playgroud)
o/p:
/fr/welcome
/fr/welcome?param1=222¶m2=aloa
/fr/welcome?param1=222¶m2=aa
Run Code Online (Sandbox Code Playgroud)