浏览 4536 次
锁定老帖子 主题:是正则表达式还是ANTLR的用武之地?
精华帖 (0) :: 良好帖 (0) :: 新手帖 (0) :: 隐藏帖 (0)
|
|
---|---|
作者 | 正文 |
发表时间:2007-04-19
想写一个正则表达式,让下面code的执行结果是: result(以逗号为token来分割字符串,逗号在"{"和"}"里面的忽略其做为token): a1=1 a2=X2{b1=1,b2=X3{c1=1,c2=2}} a3=X4{b1=1} code: Pattern p1 = Pattern.compile("(?<=^|,)(?:[^,{]++(?:\\{[^{}]*+(?:\\{[^{}]++\\})*+\\})*+)*+(?=,|$)"); Matcher m1 = p1.matcher("a1=1,a2=X2{b1=1,b2=X3{c1=1,c2=2}},a3=X4{b1=1}"); while( m1.find() ) { String foundstring = m1.group(); System.out.println("foundstring:" + foundstring); } 用正则表达式实现上面需求确实比较无奈,还是要动用到ANTLR定义自己的语言规则比较好? 声明:ITeye文章版权属于作者,受法律保护。没有作者书面许可不得转载。
推荐链接
|
|
返回顶楼 | |
发表时间:2007-04-20
郁闷,原来Java不支持正则表达式的无限递归匹配。
|
|
返回顶楼 | |
发表时间:2007-04-20
个人感觉用antlr比较好,但是项目中很少用到,没仔细看过
|
|
返回顶楼 | |
发表时间:2007-04-20
Pattern p1 = Pattern.compile("(?<=^|,)(?:[^,{]++(?:\\{[^{}]*+(?:\\{[^{}]++\\})*+\\})*+)*+(?=,|$)"); 上面的表达式满足我的结果,也就是只支持{}的一层嵌套,如果想满足二层嵌套,就必须写两倍长度于上面的正则表达式。正则表达式处理这种递归确实是个弱项。 |
|
返回顶楼 | |
发表时间:2007-04-20
如果格式是逗号和{}这些固定的, 自己写个解析程序很简单的, 效率又不知高多少倍.
|
|
返回顶楼 | |