Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/20.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
用于将正则表达式解析为AST的Java库?_Java_Regex_Parsing_Metaprogramming - Fatal编程技术网

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

用于将正则表达式解析为AST的Java库?,java,regex,parsing,metaprogramming,Java,Regex,Parsing,Metaprogramming,通常,人们会使用正则表达式将其他内容解析为AST。我要找的是一个工具,我可以用它把正则表达式本身解析成AST,然后我可以象征性地操纵它。假设我有一个像 (c(o)w)/(.*?)/omg 我想问一些问题,比如 有多少捕获组 有嵌套组吗 正则表达式中的第10个字符,是否位于捕获组的开头 并且能够以某种有意义的方式操纵正则表达式,例如: 获取所有命名组的名称 将所有命名组替换为未命名组 将任何嵌套组展平到其最外层的封闭组中 在将其序列化回字符串之前 我已经浏览了java.util.rege

通常,人们会使用正则表达式将其他内容解析为AST。我要找的是一个工具,我可以用它把正则表达式本身解析成AST,然后我可以象征性地操纵它。假设我有一个像

(c(o)w)/(.*?)/omg
我想问一些问题,比如

  • 有多少捕获组
  • 有嵌套组吗
  • 正则表达式中的第10个字符
    ,是否位于捕获组的开头
并且能够以某种有意义的方式操纵正则表达式,例如:

  • 获取所有命名组的名称
  • 将所有命名组替换为未命名组
  • 将任何嵌套组展平到其最外层的封闭组中
在将其序列化回字符串之前


我已经浏览了
java.util.regex.Pattern
,但是它的内部都是私有的,所以我无法访问它们。是否有任何第三方库可用于执行此操作?

我将用于为正则表达式创建词法分析器/解析器。根据要使用多少正则表达式语法,这可能很容易实现,但也可能相当复杂。Antlr附带了一个很好的图形编辑器,您可以在其中测试正在创建的语法文件。生成的AST在标准Java程序中非常容易操作。如果你是Antlr的新手,我强烈推荐特伦斯的Antlr书籍

看看我的基于ANTLR的PCRE解析器:

您还可以提到用于Eclipse的ANTLR插件。非常好的推荐(+1)我考虑过使用ANTLR;我使用的是Scala,所以我还有可用的解析器组合器库。我的第一个选择是一些已经制作好的库(如果有的话!),因为我希望避免成为复杂的正则表达式语法的专家来进行基本的操作。不,除了最简单的正则语法,你不应该使用正则表达式来“解析”任何东西。它们被称为“正则表达式”是有原因的。没有人要求使用regexp来“解析”某些东西。你在说什么?我明白了,我没有仔细阅读你的问题。您想要解析regexps,而不是使用regexps进行解析。不太可能找到现成的库,但实现自己的库应该很简单。是的,我自己也得出了这个结论。我不认为这将是琐碎的做我自己,但看起来这是前进的方向。。。