2014-03-19 76 views
0

我有一个像正则表达式一切

[{"id":"9","label":"P","price":"0","oldPrice":"0","products":["606","610","614","618","622","625","629"]},{"id":"8","label":"M","price":"0","oldPrice":"0","products":["607","611","615","619","626","630"]},{"id":"7","label":"G","price":"0","oldPrice":"0","products":["609","613","617","621","624","628","632"]},{"id":"36","label":"GG","price":"0","oldPrice":"0","products":["608","612","616","620","623","627","631"]},{"id":"152","label":"XGG","price":"0","oldPrice":"0","products":["3713","6577","6578","6579","6580","6581","6582"]}] 

我需要一个String是标签值:P,M,G,GG,XGG。我试图让标签和逗号之间的一切,但它不工作

“(标签)(。*)(,)”

+5

'JSON'解析器...? – Reimeus

回答

3
(?<=label\"\:)\"\w+\" 

这将做到这

或者,如果你真的想它解析为JSON

做到这一点

var arr = []; 
var jso = [{"id":"9","label":"P","price":"0","oldPrice":"0","products":["606","610","614","618","622","625","629"]},{"id":"8","label":"M","price":"0","oldPrice":"0","products":["607","611","615","619","626","630"]},{"id":"7","label":"G","price":"0","oldPrice":"0","products":["609","613","617","621","624","628","632"]},{"id":"36","label":"GG","price":"0","oldPrice":"0","products":["608","612","616","620","623","627","631"]},{"id":"152","label":"XGG","price":"0","oldPrice":"0","products":["3713","6577","6578","6579","6580","6581","6582"]}]; 
console.log(jso.length); 
for(var i=0;i<jso.length;i++){ 
    arr.push(jso[i].label); 
} 
console.log(arr); 

正则表达式演示:http://regex101.com/r/kT9kE6

5

此字符串是JSON格式,因此建议使用JSON解析器,而不是http://www.json.org/使用正则表达式

阅读关于JSON格式。

此链接提供解释了有关JSON在Java http://www.json.org/java/

+0

谢谢你,我知道它在JSON中,但我不能使用解析器,它来自一个我无法改变的网络爬虫的String对象。 –

+0

您可以解析字符串中存在的JSON内容 – anirudh

0

你的正则表达式是贪婪的。

将其更改为懒惰

label.*?,

您也可以使用条件正则表达式来只获取标签中使用的条件表达式

正则表达式的值

(?<="label":")\w+

Regex Demo

0

你或许应该使用JSON解析器,但是......

此正则表达式将捕获的组名的所有标签“标签”

.*?(?:label)":"(?<labels>[^"]+)+.*? 

或取决于你如何执行此操作,只需搜索这场比赛

(?:label)":"(?<labels>[^"]+) 

你可以看到它在这里工作:http://regex101.com/r/fS8jA8

由此产生的JAVA(由regex101生成):

String re = "(?:label)\\":\\"(?<labels>[^\\"]+)"; 
String str = "[{\"id\":\"9\",\"label\":\"P\",\"price\":\"0\",\"oldPrice\":\"0\",\"products\":[\"606\",\"610\",\"614\",\"618\",\"622\",\"625\",\"629\"]},{\"id\":\"8\",\"label\":\"M\",\"price\":\"0\",\"oldPrice\":\"0\",\"products\":[\"607\",\"611\",\"615\",\"619\",\"626\",\"630\"]},{\"id\":\"7\",\"label\":\"G\",\"price\":\"0\",\"oldPrice\":\"0\",\"products\":[\"609\",\"613\",\"617\",\"621\",\"624\",\"628\",\"632\"]},{\"id\":\"36\",\"label\":\"GG\",\"price\":\"0\",\"oldPrice\":\"0\",\"products\":[\"608\",\"612\",\"616\",\"620\",\"623\",\"627\",\"631\"]},{\"id\":\"152\",\"label\":\"XGG\",\"price\":\"0\",\"oldPrice\":\"0\",\"products\":[\"3713\",\"6577\",\"6578\",\"6579\",\"6580\",\"6581\",\"6582\"]}] 
"; 

Pattern p = Pattern.compile(re, Pattern.CASE_INSENSITIVE); 
Matcher m = p.matcher(str);