2016-08-11 47 views
0

我有键值的列表,例如: -Java的正则表达式提取键值不带引号

{ 
    "xxx" : "1234", 
    "yyy" : "1234", 
    "zzz" : "1234" 
} 

我有一个正则表达式模式: -

String pattern = ".*zzz\\s*:\\s*(.*)[\n\r]"; 

,只有在案件中提取值当关键字是'zzz'时的匹配。

但是,由于报价我没有得到一场比赛......我该如何交替我的模式来获得比赛?另外,我也不想在我的价值中获得报价。

+0

看起来no..because下面还有其他的东西,JSON解析器与 – Zavior

+0

下面还有其他一些东西,请确保你使用的任何正则表达式不会从那里拿东西。如果可能的话,我也推荐使用某种解析器而不是正则表达式,但当然我不知道你的全部情况。 – Philo

+0

如果不会工作,你应该使用JSON库,而不是正则表达式的在这里.. – Aarjav

回答

1

由于在zzz之后缺少双引号,您无法获得匹配结果。

String pattern = ".*zzz\"\\s*:\\s*(.*)[\n\r]"; 
         ^--- Here 

顺便说一句,你可以使用:

String pattern = ".*zzz\".*?\"(.*?)\""; 

然后你有过匹配match(1)抢从捕获组的内容。

Regex demo

IDE One demo

+0

是的,但我只想要的价值,而不是键值对 – Philo

+0

检查了这一点https://regex101.com/r/gN4oJ8/2 – Philo

+0

@Philo,正则表达式很好,你说的是抓住你捕获什么你的捕获组。你将不得不通过匹配方法'组(1)' –