是否有任何开源解决方案或通用正则表达式用于解析Java中的随机字符串中的名称 - 值(键值)对,并删除(可选)分隔符?
从Regular expression for parsing name value pairs,一个这样的正则表达式可能是
"((?:\"[^\"]*\"|[^=,])*)=((?:\"[^\"]*\"|[^=,])*)"
但是,上述(及其对上述问题的修改)虽然按预期工作,但会将分隔符与值一起返回。
例如,像 key="value"
这样的对会产生 {key ," value"} {key,value} 。
后一种形式的输出会更好,因为它避免了字符串后处理来删除封闭的分隔符(在这种情况下是引号)。
答案 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
"