Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/390.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 复键值对_Java_Regex - Fatal编程技术网

Java 复键值对

Java 复键值对,java,regex,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映射>。有人能建议一种方法来分割字符串吗 我尝试了regex^((\b[^\s=]+)=(([^=]\\=)+)

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

"key1=value1 key2=value2 key3=value3 key2=value6 ...."
键是字母数字的,没有空格。键可以在字符串中重复。值可以有任何值,包括空格、IP地址等

Feb 09 2015 12:28:26 UTC 
20.201.78.57
asdaaq.org 
我需要能够解析字符串并将其拆分为键值对,并且能够创建Java映射>。有人能建议一种方法来分割字符串吗


我尝试了regex
^((\b[^\s=]+)=(([^=]\\=)+)*$
,但这并不适用于所有情况

如果您可以假设值不包含
=
,那么任务就很简单:

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

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

试试看,它通过查找
=
使用lookaheads在关键字名称之前停止

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

如果值中允许使用空格,则无法区分值的结尾(n)和键的开头(n+1)。每个键值之间是否始终存在空格?cfqueryparam。你的正则表达式起作用了。非常感谢。别忘了选择他的答案:)@dcmovva你提到钥匙可以重复。这意味着您要么需要存储在
映射中,要么使用第三方库中的多重映射。@AvinashRaj:这当然是一个选项,可能
\s+(?=…
更好。