0

我正在尝试在 java 中为这个字符串创建一个正则表达式:

key:value
key:"value" 
key:'value' 
key : value  
key :"value 123" 
key: 'value 123'

每个条件都可以在一行中:

key:value key : value key : "value 123"

我必须匹配它们中的每一个,捕获键和值,修剪且不带引号。

不幸的是,java 不支持正则表达式中的条件。

有人能帮我吗?

提前致谢。

4

3 回答 3

1

此模式应满足以下要求:

(\w+)( *):( *)(\w+|(["'])([\w\s]+)\5)
于 2013-03-28T10:24:03.843 回答
1

这应该适合您的需求(演示):

(\w+)\s*:\s*((?:.(?!\w+\s*(?<!\\):))*)

第一组包含键,第二组包含值。

我添加了一种管理嵌套:在值中的方法:只需使用\.

不过,您仍然必须修剪结果。

于 2013-03-28T10:28:11.097 回答
0

您可以使用以下正则表达式:

/(\w+)\s*:\s*(((['"]).+?\4)|\w+)/

第 1 组将是您的关键,第 2 组将是价值。

现场演示:http ://www.rubular.com/r/IPqtdneBeW

于 2013-03-28T10:57:54.637 回答