我有一个请求查询字符串,其中包含带有&&name)的参数名称,因为在请求查询字符串中,参数也由&分隔,则变量名称为&&name。我写了regexp应该返回参数值

Matcher matcher = Pattern.compile("&(&[^=]+)=([^&]*)").matcher(str);
while (matcher.find()) {
String value = matcher.group(2);
    System.out.println(value);
}


因此,当请求字符串具有以下构造时,regexp可以正常工作:

  String str = "&&NAME=name 1&&NAME=name 2&type=1";


输出为:

name 1
name 2


但是当字符串具有以下构造时

String str = "&&NAME=name 1&&NAME=name & 2&type=1";


输出为:

name 1
name


我尝试了这个:

 &(&[^=]+)=([^\\S&\\S]*)


\\S匹配非空格,但无效。我该如何解决?

最佳答案

我认为您可以使用此正则表达式来确保如果&之后有非空白字符,我们将停止将字符消耗到第2组中。

String rx = "&(&.*?)=(.*?)(?=&\\S|$)";


IDEONE Demo

输出:

name 1
name & 2

08-04 11:22