Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/351.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
URL参数字符串的java正则表达式_Java_Regex - Fatal编程技术网

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

URL参数字符串的java正则表达式,java,regex,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。 任何想

我正在尝试验证字符串是否与正则表达式匹配。 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+))*");
看。它将匹配:

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


要允许空白,请在需要时添加
\\s*
。如果您还需要允许非单词字符,请使用,例如,
[\\w.-]
而不是
\w
来匹配单词字符,
-
(将
-
保留在字符类的末尾)。

取消反斜杠:如果返回true,则替换
;否则返回false使用
返回A@GiladGreen不,他的正则表达式很好。他只需要转义\,因为它是一个Java字符串。请参阅。您需要
“\\w+=\\w+(?:&\\w+=\\w+*”
regex。
\w+
将匹配一个或多个单词字符,
\w*
将允许空字符串。嗯,也许你真的想允许
=&=&=&=
,不知道。然后使用
“\\w*=\\w*(?:&\\w*=\\w*)*”
。要求是什么?。顺便说一句,添加了另一个dupe-。关于更新:您真的想匹配第二个
=
之前的空格吗?
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