我试图根据某些键分离某个字符串,并将它们以键值对的形式添加到映射中。按键可以改变位置。我是正则表达式新手,需要一些帮助来完成它。
我有一个字符串“key1=valueforkey1&key2=valueforkey2”
。该字符串也可以更改为“key2=valueforkey2&key1=valueforkey1”
。
我的正则表达式适用于上述情况,并正确分隔键和值。
当值在键之前包含“=”时,它不起作用。
例如
"key1=valueforkey1=&key2=valueforkey2"
或
"key1=valueforkey1==&key2=valueforkey2".
我的 map 将包含
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]+=|$)
请参阅regex demo .
([^=&\\s]+)
- 第 1 组:除=
、&
和空格之外的任何 1+ 个字符=
-=
符号(.*?)
- 第 2 组:除换行符之外的任何 0+ 个字符,尽可能少(?=&[^=&\\s]+=|$)
- 紧邻当前位置的右侧,必须有&
后跟1+ 个除=
、&
和空格以及=
或字符串结尾之外的字符。
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}
关于java - 如何使用某些单词分隔可以动态的字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57589897/