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

Java 如何使用某些单词来分隔可以是动态的字符串,java,regex,Java,Regex,我试图基于某些键分离某个字符串,并将它们以键值对的形式添加到映射中。钥匙可以改变位置。我是新加入regex的,希望得到一些帮助来完成它 我有一个字符串“key1=valueforkey1&key2=valueforkey2”。此字符串也可以更改为“key2=valueforkey2&key1=valueforkey1” 我的正则表达式适用于上述情况,并正确地分隔键和值 当值在键前包含“=”时,它不起作用 比如说 "key1=valueforkey1=&key2=valueforkey2"

我试图基于某些键分离某个字符串,并将它们以键值对的形式添加到映射中。钥匙可以改变位置。我是新加入regex的,希望得到一些帮助来完成它

我有一个字符串
“key1=valueforkey1&key2=valueforkey2”
。此字符串也可以更改为
“key2=valueforkey2&key1=valueforkey1”

我的正则表达式适用于上述情况,并正确地分隔键和值

当值在键前包含“=”时,它不起作用

比如说

"key1=valueforkey1=&key2=valueforkey2"

我的地图将包含

map("key1", "valueforkey1") 

而不是

map("key1", "valueforkey1==") 

map("key2", "valueforkey2") 
字符串分隔符=“[=&?]+”;
String[]split=text.split(分隔符);
对于(int i=0;i您可以使用

([^=&\s]+)=(.*?)(?=&[^=&\s]+=|$)

  • ([^=&\\s]+)
    -第1组:除
    =
    &
    和空格以外的任何1+字符
  • =
    -一个
    =
    符号
  • (.*)
    -第2组:除换行符以外的任何0+字符,尽可能少
  • (?=&[^=&\\s]+=|$)
    -在当前位置的右侧必须紧跟着
    &
    ,后跟1+字符,而不是
    =
    &
    和空格,然后是
    =
    或字符串结尾
:

String str=“key1=valueforkey1==&key2=valueforkey2”;
模式p=Pattern.compile(([^=&\\s]+)=(.*?(=&[^=&\\s]+=$);
匹配器m=p.Matcher(str);
Map res=新的HashMap();
while(m.find()){
研究组(m组(1)、m组(2));
}
System.out.println(res);//=>{key1=valueforkey1==,key2=valueforkey2}
map("key1", "valueforkey1==") 

map("key2", "valueforkey2") 
map("key1", "valueforkey1") or

map("key1", "valueforkey1=") or

map("key1", "valueforkey1==")
map("key2", "valueforkey2") or

map("key2", "valueforkey2=") or

map("key2", "valueforkey2==")
([^=&\s]+)=(.*?)(?=&[^=&\s]+=|$)
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}