Java匹配无限嵌套的括号
程序员文章站
2022-04-13 14:11:50
...
在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(String expr)throws Exception{
ANTLRInputStream in = new ANTLRInputStream(expr);
JsonLexer lexer = new JsonLexer(in);
CommonTokenStream tokens = new CommonTokenStream(lexer);
JsonParser exprParser = new JsonParser(tokens);
ExprContext exprContext = exprParser.expr();
System.out.println(exprContext.getText());
List<Bracket_bodyContext> list = exprContext.bracket_body();
System.out.println(list.size());
System.out.println(list.get(2).getText());
}
}
是不是很简单呀!只要把大括号替换为中括号或小括号,就可以匹配无限嵌套的中括号和小括号了。
上一篇: PHP的目录管理函数_PHP教程
下一篇: 通过文件头判断图片格式