定义和验证元素的组合

时间:2013-12-01 21:23:28

标签: java regex

我怎样才能最好地定义给定集合的元素之间的一组所需组合,例如S = {A,B,C}并验证给定的组合是否有效。

示例:

Element Set: S={A,B,C}
Set of valid combinations: C={ (A), (A,B), (A,C), (A,A) }

RegEx问题:

我在尝试使用像

这样的正则表达式时遇到的问题
(^A[ABC]{0,1}$)

是分隔符(逗号)的用法。此表达式仅匹配以下形式的单词(组合):

A
AA
AB
AC

但是,使用分隔符是必要的,以便在使用S = {A,AA}的元素集时区分单词。但是,实现分隔符会使表达式过于复杂,因此很难生成并在之后读取。

有人可能会为此实现一种特殊语言,但也许有另一种更简单的方法可以做到这一点吗?

1 个答案:

答案 0 :(得分:0)

您可以使用此模式:

String input = "C={ (A), (A,B), (A,C), (A,A) }";
                          //| starts with "A"
                             //|May be followed by comma, and A or B or C
Pattern p = Pattern.compile("A(,\\s?([ABC],?\\s?)+)?");
Matcher m = p.matcher(input);
while (m.find()) {
    System.out.println(m.group());
}

输出:

A
A,B
A,C
A,A

这也适用于(A, ABC)等模式。

由于分隔符是正则表达式的一部分,因此添加它是微不足道的。

如果您有多个分隔符,则可以使用字符类(如果您同时使用,[,./].也可能变为/

如果您需要解析分层数据表示,那么正则表达式可能不是您正在寻找的。