雪湖小札@blogjava

          心情與技術(shù)文檔同行 http://hi.baidu.com/jingleq

          BlogJava 首頁 新隨筆 聯(lián)系 聚合 管理
            24 Posts :: 2 Stories :: 4 Comments :: 0 Trackbacks
          有這么一個(gè)字符串:a1=1,a2=X2{b1=1,b2=X3{c1=1,c2=2}},a3=X4{b1=1}
          想寫一個(gè)正則表達(dá)式,讓下面code的執(zhí)行結(jié)果是:
          result(以逗號(hào)為token來分割字符串,逗號(hào)在"{"和"}"里面的忽略其做為token):
          a1=1  
          a2
          =X2{b1=1,b2=X3{c1=1,c2=2}}   
          a3
          =X4{b1=1}
          以上問題來自 http://www.javaeye.com/post/265973

          使用antlr3規(guī)則處理
          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 閱讀(857) 評(píng)論(0)  編輯  收藏

          只有注冊(cè)用戶登錄后才能發(fā)表評(píng)論。


          網(wǎng)站導(dǎo)航:
           
          主站蜘蛛池模板: 芒康县| 金沙县| 巴青县| 临猗县| 黄大仙区| 汕尾市| 黎平县| 江达县| 运城市| 建瓯市| 上高县| 龙江县| 依兰县| 峨山| 潜江市| 尤溪县| 阿勒泰市| 玉溪市| 普兰店市| 凭祥市| 廊坊市| 诸城市| 安塞县| 丰原市| 芜湖市| 米脂县| 乌拉特后旗| 兴业县| 喜德县| 永善县| 石渠县| 大姚县| 广汉市| 象州县| 南康市| 内丘县| 林周县| 汨罗市| 右玉县| 海口市| 安吉县|