用于将正则表达式解析为 AST 的 Java 库?

标签 java regex parsing metaprogramming

通常,人们会使用正则表达式将某些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/

相关文章:

java - Java Swing应用程序中大量组件的 "enabled"状态切换

java - 最近未使用(NUR)页面替换算法

java - 为什么 File.exists() 不起作用

java - Android 和 Robotium - 编写自动化测试?

java Regex - 忽略引号?

python - 如何处理 Beautifulsoup 递归错误(或解析错误)

c# - 在控制台 C# 中写入 double

php - 为什么使用dom而不是regex来解析网页?

ios - 用于将特定 URL 与小写字母和破折号匹配的正则表达式

json - Angular $http 服务 - 强制不解析对 JSON 的响应