【问题标题】:How to separate a string that can be dynamic using certain words如何使用某些单词分隔可以是动态的字符串
【发布时间】:2019-08-21 19:37:29
【问题描述】:

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

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

【问题讨论】:

    标签: java regex


    【解决方案1】:

    你可以使用

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

    请参阅regex demo

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

    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}
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2012-05-13
      • 1970-01-01
      • 2011-09-11
      • 1970-01-01
      • 2010-12-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多