首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > JAVA > J2SE开发 >

小白java正则表达式遇到有关问题,

2013-04-26 
小白java正则表达式遇到问题,求助啊。本帖最后由 prog_C 于 2013-04-24 09:23:42 编辑想解析人人好友的相关

小白java正则表达式遇到问题,求助啊。
本帖最后由 prog_C 于 2013-04-24 09:23:42 编辑 想解析人人好友的相关信息,特意学了一段时间的正则表达式,但还是遇到很着急的问题,求帮忙看一下:

final String friendList = "var friends=[{"id":422727123,"vip":false,"selected":true,"mo":false,"name":"\u9648\u671b\u6797","head":"http:\\/\\/hdn.xnimg.cn\\/photos\\/hdn121\\/20111020\\/2120\\/tiny_dfoU_59555d019117.jpg","groups":[]},{"id":123456789,"vip":false,"selected":false,"mo":false,"name":"\u9648\u76ca\u714c","head":"http:\\/\\/hdn.xnimg.cn\\/photos\\/hdn121\\/20130423\\/0105\\/tiny_Vhoj_f8eb00022ee4111a.jpg","groups":[]}];";
final String regex = ""id":(\\d{9}),"vip":.*"name":"(.*)","head":"(.*.jpg)","";
Pattern pattern = Pattern.compile(regex);
Matcher matcher = pattern.matcher(friendList);
int i;
while(matcher.find())
{
System.out.println("GroupCount : "+ matcher.groupCount());
System.out.println("Start : "+matcher.start());
System.out.println("End : "+matcher.end());
for(i = 0;i<=matcher.groupCount();i++)
{
System.out.println(matcher.group(i));
}
}

friedList中有两位好友的信息。
打印matcher.end()返回的值,发现是相当靠后的一个位置,问题应该是匹配过头了。尝试开启过勉强模式,但还是失败了。
求帮忙指点一下。 java基础 正则表达式 java正则
[解决办法]
这是一段json串,用正则来解析应该是不合适的。
http://bbs.csdn.net/topics/390331957
这是解析json串的帖子,
楼主一定要用正则的话,其实你的那个正则匹配式效率是相当的低的。
另外楼主的匹配式子可以加一个开头和结束标记再试试
[解决办法]
最简单的方式split(",")后,找到id之类的数据再split(":")
[解决办法]

final String friendList = "var friends=[{"id":422727123,"vip":false,"selected":true,"mo":false,"name":"\u9648\u671b\u6797","head":"http:\\/\\/hdn.xnimg.cn\\/photos\\/hdn121\\/20111020\\/2120\\/tiny_dfoU_59555d019117.jpg","groups":[]},{"id":123456789,"vip":false,"selected":false,"mo":false,"name":"\u9648\u76ca\u714c","head":"http:\\/\\/hdn.xnimg.cn\\/photos\\/hdn121\\/20130423\\/0105\\/tiny_Vhoj_f8eb00022ee4111a.jpg","groups":[]}];";
final String regex = ""id":(\\d{9}),"vip":.*?"name":"(.*?)","head":"(.*?.jpg)","";
Pattern pattern = Pattern.compile(regex);
Matcher matcher = pattern.matcher(friendList);
int i;
while(matcher.find())
{
System.out.println("GroupCount : "+ matcher.groupCount());
System.out.println("Start : "+matcher.start());
System.out.println("End : "+matcher.end());
for(i = 0;i<=matcher.groupCount();i++)
{
System.out.println(matcher.group(i));
}
}


把你所有的.*都改成.*?就行了.
贪婪匹配改成非贪婪

热点排行