在Java中解析名称-值对

在Java中解析名称-值对,java,regex,Java,Regex,在Java中,是否有任何开源解决方案或通用正则表达式来解析随机字符串中的名称-值(键值)对,并去掉(可选)分隔符 从某种意义上说,这样的正则表达式可能是 "((?:\"[^\"]*\"|[^=,])*)=((?:\"[^\"]*\"|[^=,])*)" 但是,上面的代码(及其在上述问题上的变体)虽然工作正常,但会返回分隔符和值 例如,像key=“value”这样的对将生成{key,“value”}而不是{key,value} 后一种输出形式会更好,因为它避免了字符串后处理以删除封闭的分隔符(在

在Java中,是否有任何开源解决方案或通用正则表达式来解析随机字符串中的名称-值(键值)对,并去掉(可选)分隔符

从某种意义上说,这样的正则表达式可能是

"((?:\"[^\"]*\"|[^=,])*)=((?:\"[^\"]*\"|[^=,])*)"
但是,上面的代码(及其在上述问题上的变体)虽然工作正常,但会返回分隔符和值

例如,像
key=“value”
这样的对将生成{key“value”}而不是{key,value}


后一种输出形式会更好,因为它避免了字符串后处理以删除封闭的分隔符(在本例中为引号)。

如果要使表单坚持可选引号,而不将它们包含在键或值捕获中,可以执行类似操作(以正则表达式为例,并包括可能的单引号)

捕获缓冲区2,4包含键、值对(不带引号)

但这将收集由=号分隔的可能垃圾值。
我认为最好提供一个包含有限可接受valeus的类

我会用这样的东西

"
 (['\"]?) \s* (\w[-:\s\w]*?) \s* \1
 \s* = \s*
 (['\"]?) \s* (\w[-:\s\w]*?) \s* \3
"
可能的贪婪版本

\w+(?:\s+[-:\w]+)*


[-:\w]+(?:\s+[-:\w]+)*

在这个

"
 (['\"]?) \s* (\w+(?:\s+[-:\w]+)*) \s* \1
 \s* = \s*
 (['\"]?) \s* (\w+(?:\s+[-:\w]+)*) \s* \3
"

如果要使表单遵循可选引号,而不包含在键或值捕获中,可以执行类似操作(以正则表达式为例,并包括可能的单引号)

捕获缓冲区2,4包含键、值对(不带引号)

但这将收集由=号分隔的可能垃圾值。
我认为最好提供一个包含有限可接受valeus的类

我会用这样的东西

"
 (['\"]?) \s* (\w[-:\s\w]*?) \s* \1
 \s* = \s*
 (['\"]?) \s* (\w[-:\s\w]*?) \s* \3
"
可能的贪婪版本

\w+(?:\s+[-:\w]+)*


[-:\w]+(?:\s+[-:\w]+)*

在这个

"
 (['\"]?) \s* (\w+(?:\s+[-:\w]+)*) \s* \1
 \s* = \s*
 (['\"]?) \s* (\w+(?:\s+[-:\w]+)*) \s* \3
"

是否需要支持特定的格式?如果需要,请指定格式。如果没有,则可以将上述模式简化为
“\”([^\“]*)\“=”([^\“]*)\”
(即,要求键和值始终用双引号括起来,并且只抓取引号内的部分)。格式如我的示例所示:key=value或key=“value”(即,引号是可选的,但可能存在)。键是否可以用引号括起来?如果一个键或值需要包含一个实际的双引号字符,会发生什么情况?它们是否总是用逗号分隔?是否会有一个尾随逗号?如果说它是随机字符串,您希望如何解析像
a“b”=c=d=“xy=z\”这样的字符串“
?是否需要支持特定的格式?如果需要,请指定格式。如果没有,则可以将上述模式简化为”
“\”([^\“]*)\“=”([^\“]*)\”
(即,要求密钥和值始终用双引号括起来,并且只抓取引号内的部分)。格式如我的示例所示:key=value或key=“value”(即,引号是可选的,但可能存在)。键是否可以用引号括起来?如果一个键或值需要包含一个实际的双引号字符,会发生什么情况?它们是否总是用逗号分隔?是否会有一个尾随逗号?如果说它是随机字符串,您希望如何解析字符串,如
a“b”=c=d=“xy=z\”