在Java中解析名称 - 值对

时间:2012-01-25 16:23:33

标签: java regex

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

Regular expression for parsing name value pairs,一个这样的正则表达式可能是

"((?:\"[^\"]*\"|[^=,])*)=((?:\"[^\"]*\"|[^=,])*)"

但是,上述(及其对上述问题的修改)虽然按预期工作,但会将分隔符与值一起返回。

例如,像 key="value" 这样的对会产生 {key " value"} {key,value}

后一种形式的输出会更好,因为它避免了字符串后处理来删除封闭的分隔符(在这种情况下是引号)。

1 个答案:

答案 0 :(得分:1)

如果你想让表单遵循可选引号而不包含键或值捕获,你可以这样做(使用你的正则表达式作为例子,并包括可能的单引号作为分隔符)。

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

"
 (['\"]?)  ([^'\"=,]+)  \1
 =
 (['\"]?)  ([^'\"=,]+)  \3
"

但这将收集由=符号分隔的可能垃圾值 我认为最好提供一个包含有限可接受的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
"