雪湖小札@blogjava

心情与技术文档同行 http://hi.baidu.com/jingleq

BlogJava 首页 新随笔 联系 聚合 管理
  24 Posts :: 2 Stories :: 4 Comments :: 0 Trackbacks
有这么一个字符串:a1=1,a2=X2{b1=1,b2=X3{c1=1,c2=2}},a3=X4{b1=1}
想写一个正则表达式,让下面code的执行结果是:
result(以逗号为token来分割字符串,逗号在"{"和"}"里面的忽略其做为token):
a1=1  
a2
=X2{b1=1,b2=X3{c1=1,c2=2}}   
a3
=X4{b1=1}
以上问题来自 http://www.javaeye.com/post/265973

使用antlr3规则处理
grammar Spl;
options {
  output
=AST;
  ASTLabelType=CommonTree;
}
stat     :    spl
[0];
spl 
[int step]     returns [String value]:    (expr[step]  
    {    
        if ($value!
=null)
            $value +
= $expr.value;
        else
            $value 
= $expr.value;
    }) +
    
;
expr 
[int step]    returns [String value]:    a=ID '=' b=ID (| p=param[step]) c=','? 
    {
        String str 
= $a.text + "=" + $b.text;
        if (p !=null)
            str +
= $param.value;
        if ($step == 0) {
            System.out.println(str)
;
        } else {
            $value 
= str;
            if (c!=null)
                $value +
=",";
        } 
    }
    
;
param [int step] returns [String value]:    '{' spl[1] '}'
    {
        $value 
= "{" + $spl.value + "}";
    }
    
;
ID    :    ('a'..'z' | 'A'..'Z' | '
0' .. '9')('a'..'z' | 'A'..'Z' | '0' .. '9') *;
EQPARAM    :    '=';
WS    :    (' '|'\t'|'\n'|'\r') + {skip();};
posted on 2007-06-25 13:26 csnowfox 阅读(853) 评论(0)  编辑  收藏

只有注册用户登录后才能发表评论。


网站导航: