我有一个请求查询字符串,其中包含带有&
(&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