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

标签 java regex

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

我有一个字符串“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+ 个除 =& 和空格以及 = 或字符串结尾之外的字符。

Java demo :

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/

相关文章:

java - 谷歌地图overview_polyline给出了错误的值

java - 调试时不关闭数据库连接有问题吗?

java - Java 和 Groovy 的正则表达式引擎是一样的吗?

c# - 正则表达式获取文件扩展名

python - django/python - 正则表达式

javascript - 如何在此正则表达式中包含 - 和 '?

java - 我可以向 JAX-RS 方法添加自定义注释以验证访问吗?

java - 如何以页面/部分的形式最好地返回 SQL 结果

java - 向 ProcessBuilder 添加参数 - Java

javascript - 正则表达式提取括号中的单词不起作用