用于URL参数字符串的正则表达式java

时间:2017-06-23 09:48:26

标签: java regex

我正在尝试验证字符串是否与正则表达式匹配。 网址格式为: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时,它显示为false,而它应显示为true。 任何想法!

1 个答案:

答案 0 :(得分:1)

你需要的正则表达式是

Pattern.compile("(?:\\w+=\\w*|=\\w+)(?:&(?:\\w+=\\w*|=\\w+))*");

请参阅regex demo。它将匹配:

  • (?:\\w+=\\w*|=\\w+) - 1个字母字符后跟=,然后是0 +字字符(强制键,可选值)或=后跟1个字字符(可选键)
  • (?:&(?:\\w+=\\w*|=\\w+))* - 零个或多个上述序列。

Java demo

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来匹配单词字符.-(保留- }在角色类的末尾。)