【发布时间】:2013-01-05 02:40:09
【问题描述】:
通常,人们会使用正则表达式将某些东西 else 解析为 AST。我正在寻找的是一种工具,可用于将正则表达式本身解析为 AST,然后我可以对其进行符号操作。假设我有一个像
这样的正则表达式(c(o)w)/(.*?)/omg
我希望能够提出类似的问题
- 有多少个捕获组?
- 是否有嵌套组?
- 字符
.(正则表达式中的第 10 个字符)是否位于捕获组的开头?
并且能够以某种有意义的方式操作正则表达式,例如:
- 获取所有命名组的名称
- 用未命名的组替换所有命名的组
- 将任何嵌套组展平到最外层的封闭组中
在将其序列化回字符串之前。
我已经在 java.util.regex.Pattern 附近闲逛了,但它的内部都是私有的,所以我无权访问它们。我可以使用任何第三方库来执行此操作吗?
【问题讨论】:
-
不,你不应该使用正则表达式来“解析”除了最简单的常规语法之外的任何东西。它们被称为“正则表达式”是有原因的。
-
没有人要求使用正则表达式来“解析”某些东西。你在说什么?
-
我明白了,我没有仔细阅读您的问题。你想解析正则表达式,而不是用正则表达式解析。您不太可能找到一个现成的库,但实现您自己的库应该很简单。
-
是的,我自己也得出了这个结论。我不认为自己做这件事会微不足道,但看起来这就是前进的方向......
标签: java regex parsing metaprogramming