Java中用于URL参数字符串的正则表达式。

3

我将尝试验证字符串是否与正则表达式匹配。

URL格式为:key=value&key=value&....

键或值可以为空。

我的代码如下:

Pattern patt = Pattern.compile("\\w*=\\w*&(\\w *=\\w*)* ");
Matcher m = patt.matcher(s);
if(m.matches()) return true;
else return false;

当我输入one=1&two=2时,它显示为假,而实际上应该是真的。有什么想法!

顺便说一下:用return A;替换if A return true; else return false; - Florian Albrecht
@GiladGreen 不,他的正则表达式是正确的。他只需要转义 \,因为它是 Java 字符串。 - Mistalis
关于更新:你真的想匹配第二个“=”前面的空格吗? - Henry
key=value&key=value&.... 空键或值被接受,但必须存在'='(例如“=value”,“key=”)。 - Amir Choubani
@WiktorStribiżew 你尝试的例子是什么? - Amir Choubani
显示剩余8条评论
1个回答

4
你需要的正则表达式是:
Pattern.compile("(?:\\w+=\\w*|=\\w+)(?:&(?:\\w+=\\w*|=\\w+))*");

请查看正则表达式演示,它将匹配:

  • (?:\\w+=\\w*|=\\w+) - 要么是一个或多个单词字符,后跟=,然后是0个或多个单词字符(必须的键,可选值),要么是=,后跟一个或多个单词字符(可选键)
  • (?:&(?:\\w+=\\w*|=\\w+))* - 上述序列的零个或多个

Java演示

String s = "one=1&two=2&=3&tr=";
Pattern patt = Pattern.compile("(?:\\w+=\\w*|=\\w+)(?:&(?:\\w+=\\w*|=\\w+))*");
Matcher m = patt.matcher(s);
if(m.matches()) {
    System.out.println("true");
} else {
    System.out.println("false");
}
//  => true

如果需要允许空格,请在需要的地方添加\\s*。如果还需允许非单词字符,则可以使用例如 [\\w.-] 而非 \w来匹配单词字符、点号和短横线(请将短横线保留在字符类的末尾)。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接