在Java中单纯依靠正则表达式是无法匹配无限嵌套的括号的,还好有antlr这个大杀器可以轻松解决这个问题,开源就是好啊。
1. 材料
antlr-4.4-complete.jar
2. 文法文件Json.g4
grammar Json;
@header{
package a3;
}
LEFT_BRACKET : '{';
RIGHT_BRACKET : '}';
ANY_CHAR : (~('{' | '}'))+;
bracket_body : LEFT_BRACKET (ANY_CHAR | bracket_body)* RIGHT_BRACKET;
expr : (bracket_body)+;
2.测试
import java.util.List;
import org.antlr.v4.runtime.ANTLRInputStream;
import org.antlr.v4.runtime.CommonTokenStream;
import a3.JsonLexer;
import a3.JsonParser;
import a3.JsonParser.Bracket_bodyContext;
import a3.JsonParser.ExprContext;
public class Test3 {
public static void main(String[] args)throws Exception {
run("{}{1111}{1:{aa:{s}}}");
}
public static void run(St