复杂的键值对

时间:2015-02-12 02:31:55

标签: java regex

我有一个这种格式的字符串

"key1=value1 key2=value2 key3=value3 key2=value6 ...."

键是字母数字,没有空格。键可以在字符串中重复。值可以包含任何值,包括空格,IP地址等。某些值的示例是

Feb 09 2015 12:28:26 UTC 
20.201.78.57
asdaaq.org 

我需要能够解析字符串并将其拆分为键值对,并能够创建Java映射>。有人可以提出一种拆分字符串的方法。

我尝试了正则表达式^((\b[^\s=]+)=(([^=]|\\=)+))*$,但这不适用于所有情况

2 个答案:

答案 0 :(得分:1)

如果您认为值不包含=,那么任务就像以下一样简单:

String[] kvPairs = inputString.split("\\s+(?=[A-Za-z0-9]+=)");

(?=[A-Za-z0-9]+=)是一个零宽度断言,与每个键的开头匹配,后者是字母数字后跟=,中间没有任何空格。 \s+匹配1个或多个空白字符并将其视为分隔符,因此结果不会有任何尾随空格。

答案 1 :(得分:1)

尝试这一点,它会通过查找=使用前瞻符来在键名之前停止。

([\w\d]+)=([^=]*)(?=\s\w+=|$)