通常,人们会使用正则表达式将某些else 解析为 AST。我正在寻找的是一种工具,我可以使用它来将正则表达式本身解析为 AST,然后我可以对其进行符号操作。假设我有一个像
这样的正则表达式(c(o)w)/(.*?)/omg
我想问这样的问题
- 有多少个捕获组?
- 是否有嵌套组?
- 正则表达式中的第 10 个字符
.
是否位于捕获组的开头?
并能够以某种有意义的方式操纵正则表达式,例如:
- 获取所有命名组的名称
- 用未命名组替换所有命名组
- 将任何嵌套组展平到最外层的封闭组中
在将其序列化回字符串之前。
我研究过 java.util.regex.Pattern
,但它的内部结构都是私有(private)的,所以我无权访问它们。我可以使用任何第三方库来执行此操作吗?
最佳答案
我会使用 ANTLR为正则表达式创建词法分析器/解析器。根据您要使用的正则表达式语法的数量,这可能很容易也可能相当复杂。 Antlr 带有一个漂亮的图形编辑器,您可以在其中测试您正在创建的语法文件。生成的 AST 在标准 Java 程序中非常容易操作。如果您是 Antlr 的新手,我强烈推荐 Terence 撰写的 Antlr 书。
关于用于将正则表达式解析为 AST 的 Java 库?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14448863/