有這么一個(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();};
想寫一個(gè)正則表達(dá)式,讓下面code的執(zhí)行結(jié)果是:
result(以逗號(hào)為token來分割字符串,逗號(hào)在"{"和"}"里面的忽略其做為token):



使用antlr3規(guī)則處理



































