如何使用某些单词分隔可以动态的字符串



我正在尝试根据某些键分隔某个字符串,并将它们添加到键值对中的映射中。按键可以改变位置。我是正则表达式的新手,希望得到一些帮助来完成它。

我有一个字符串"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}

最新更新