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

标签 java regex

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

最佳答案

你需要的正则表达式是

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

关于java - URL参数字符串的正则表达式java,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44718325/

相关文章:

Java从sqlite检索数据返回对象而不是值

java - 简单的火星探测器示例

java - 为什么即使我下载了最新的 java 版本,也没有 java 运行时?

JavaScript 正则表达式 : give me everything except what is between this pattern

c# - 使用正则表达式和清理字符串内存?

javascript - 逗号分隔的电话号码验证

javascript - 正则表达式抓取太多文本

regex - Mod 重写传递参数规则

java applet卡住浏览器以及javascript和applet之间通信的方式

java - 数据库中添加NULL