表示Regex Java的数据结构

时间:2016-11-23 18:14:49

标签: java

我试图用Java中的数据结构来表示正则表达式。

我创建了一个这样的类来表示单个字符:

class RegexElement {
     String elem;
     int min;
     int max;
     boolean isOptional;
}

通过这种方式,我可以表示例如这样的正则表达式:\w{4,5}。首先我想创建一个RegexElement列表,但问题在于RegexElement块的迭代器(这样我只能表示单个字符,而不是像(\w\s)+这样的块。)

所以我想创建一个名为Element的抽象类,以及两个子类:一个RegexElement和另一个IteratorBlockElement。第一个表示像之前一样的单个字符,第二个表示一个字符块迭代。通过这种方式,IteratorBlockElement的实例变量是一个元素列表,因为可能发生两个嵌套迭代器,如:(\w(\d\w)+)+

如果我使用所描述的域管理此正则表达式,我将有一个元素列表,其中包含一个IteratorBlockElement对象,由RegexElement和另一个IteratorBlockElement组成,由两个RegexElement组成。

我不确定这是否正确,创建一个具有实例变量的超类的子类,因此它可以拥有自己的实例。可能有一个更智能的解决方案,这种特殊情况的模式。谢谢!

1 个答案:

答案 0 :(得分:2)

完全可以并且拥有包含元素的元素的自然方式。例如,这样做表示像3 + 4*5

这样的表达式
class BinaryExpr extends Expr {
    Expr left;
    BinaryOp op;
    Expr right;
}

要查看完整的Java正则表达式需要多少数据类型,请阅读java.util.Pattern的源代码。