我正在尝试根据某些键分隔某个字符串,并将它们添加到键值对中的映射中。按键可以改变位置。我是正则表达式的新手,希望得到一些帮助来完成它。
我有一个字符串"key1=valueforkey1&key2=valueforkey2"
.此字符串也可以更改为"key2=valueforkey2&key1=valueforkey1"
。
我的正则表达式适用于上述情况,并正确分隔键和值。
当值在键前包含"="时,它不起作用。
例如
"key1=valueforkey1=&key2=valueforkey2"
或
"key1=valueforkey1==&key2=valueforkey2".
我的地图将包含
map("key1", "valueforkey1")
和
map("key2", "valueforkey2")
而不是
map("key1", "valueforkey1==")
map("key2", "valueforkey2")
String delimiter = "[= & ?]+";
String[] split = text.split(delimiter );
for (int i=0; i<split.length; i+=2) {
maps.put(split[i], split[i+1]);
}
我希望将字符串分开并将它们添加到映射中的键值对中。
map("key1", "valueforkey1") or
map("key1", "valueforkey1=") or
map("key1", "valueforkey1==")
和
map("key2", "valueforkey2") or
map("key2", "valueforkey2=") or
map("key2", "valueforkey2==")
您可以使用
([^=&s]+)=(.*?)(?=&[^=&s]+=|$)
请参阅正则表达式演示。
([^=&\s]+)
- 第 1 组:除=
、&
和空格以外的任何 1+ 个字符=
-=
标志(.*?)
- 组 2:除换行符字符以外的任何 0+ 字符,尽可能少(?=&[^=&\s]+=|$)
- 紧靠当前位置的右侧,必须有&
后跟 1+ 字符,而不是=
、&
和空格,然后是字符串的=
或结尾。
Java演示:
String str = "key1=valueforkey1==&key2=valueforkey2";
Pattern p = Pattern.compile("([^=&\s]+)=(.*?)(?=&[^=&\s]+=|$)");
Matcher m = p.matcher(str);
Map<String, String> res = new HashMap<String, String>();
while (m.find()) {
res.put(m.group(1), m.group(2));
}
System.out.println(res); // => {key1=valueforkey1==, key2=valueforkey2}