繁体   English   中英

解析Java中的名称/值对

[英]Parsing name-value pairs in Java

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

用于解析名称值对的正则表达式中,这样的一个正则表达式可以是

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

但是,以上内容(及其在前面提到的问题上的变体)虽然按预期工作,但返回分隔符和值。

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

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

如果要使表单坚持使用可选引号,而键或值捕获中不包含可选引号,则可以执行以下操作(以正则表达式为例,并包括可能的单引号作为分隔符)。

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

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

但这会收集可能的垃圾值,并以=号分隔。
我认为最好提供一个包含有限可接受价值的类。

我会用这样的东西。

"
 (['\"]?) \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
"

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM