Java 从正则表达式构建树
我需要构建表示Java正则表达式的树Java 从正则表达式构建树,java,regex,Java,Regex,我需要构建表示Java正则表达式的树java.util.regex.Pattern执行此任务,但是它的根字段和节点内部类(及其子类)不可见,因此我无法访问它们。我必须编写自己的解析器并重新实现所有解析逻辑?您可以使用这些私有字段,或者使用现有的regex/PCRE解析器:。请注意,PCREParser库(我是其作者)从未进行过真正的(单元)测试:因此,如果您计划在生产代码中使用它,请对其进行一些适当的单元测试!:) 谢谢您的回答,但我需要严格遵守Java正则表达式方言。例如,基于ANTLR的库与
java.util.regex.Pattern
执行此任务,但是它的根
字段和节点
内部类(及其子类)不可见,因此我无法访问它们。我必须编写自己的解析器并重新实现所有解析逻辑?您可以使用这些私有字段,或者使用现有的regex/PCRE解析器:。请注意,PCREParser库(我是其作者)从未进行过真正的(单元)测试:因此,如果您计划在生产代码中使用它,请对其进行一些适当的单元测试!:) 谢谢您的回答,但我需要严格遵守Java正则表达式方言。例如,基于ANTLR的库与regex“[a |]”
不正确匹配,将“|”
解释为OR运算符。反射可能是唯一可行的解决方案。@Manuel,它很好地匹配了它(不匹配它意味着不匹配异常或类似情况)。诚然,我不会在字符类内更改元字符的令牌类型,如|
、*
、+
等。这将导致大量的嵌入式代码。之后遍历树并更改CHAR_类
树的所有子标记的类型是很简单的:输入“[a |]”“
被正确解析到树中:^(CHAR_类“a”|”)
。无论如何,反射可能仍然是更好的选择,当然!:)