2

通常,人们会使用正则表达式将其他内容解析为 AST。我正在寻找的是一种工具,可用于将正则表达式本身解析为 AST,然后我可以对其进行符号操作。假设我有一个像

(c(o)w)/(.*?)/omg

我希望能够提出类似的问题

  • 有多少个捕获组?
  • 有嵌套组吗?
  • .则表达式中的第 10 个字符是否位于捕获组的开头?

并且能够以某种有意义的方式操作正则表达式,例如:

  • 获取所有命名组的名称
  • 将所有命名组替换为未命名组
  • 将任何嵌套组展平为其最外层的封闭组

在将其序列化回字符串之前。

我已经四处看了看java.util.regex.Pattern,但它的内部都是私有的,所以我无权访问它们。我可以使用任何第三方库来执行此操作吗?

4

2 回答 2

4

我会使用ANTLR为正则表达式创建词法分析器/解析器。根据您要使用多少正则表达式语法,这可能很容易相当复杂。Antlr 带有一个漂亮的图形编辑器,您可以在其中测试您正在创建的语法文件。生成的 AST 在标准 Java 程序中非常容易操作。如果您是 Antlr 的新手,我强烈推荐 Terence 的 Antlr 书。

于 2013-01-21T23:29:58.250 回答
3

看看我的基于 ANTLR 的 PCRE 解析器:https ://github.com/bkiers/PCREParser

于 2013-01-22T17:09:03.700 回答