Java 定义和验证元素的组合

Java 定义和验证元素的组合,java,regex,Java,Regex,如何最好地在给定集合的元素之间定义一组所需的组合,如S={a,B,C},并验证给定的组合是否有效 示例: Element Set: S={A,B,C} Set of valid combinations: C={ (A), (A,B), (A,C), (A,A) } 正则表达式问题: Element Set: S={A,B,C} Set of valid combinations: C={ (A), (A,B), (A,C), (A,A) } 我在尝试使用正则表达式时发现的问题,如 (^A[

如何最好地在给定集合的元素之间定义一组所需的组合,如S={a,B,C},并验证给定的组合是否有效

示例:

Element Set: S={A,B,C}
Set of valid combinations: C={ (A), (A,B), (A,C), (A,A) }
正则表达式问题:

Element Set: S={A,B,C}
Set of valid combinations: C={ (A), (A,B), (A,C), (A,A) }
我在尝试使用正则表达式时发现的问题,如

(^A[ABC]{0,1}$)
是分隔符(逗号)的用法。此表达式仅与以下形式的单词(组合)匹配:

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


有人可能会为此实现一种特殊的语言,但可能有另一种更简单的方法来实现这一点?

您可以使用以下模式:

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)
这样的模式

因为分隔符是正则表达式的一部分,所以添加它很简单

如果有多个分隔符,则可以使用字符类(因此,如果同时使用
/
,则
可能会变成
[,./]


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

在将字符串传递给正则表达式之前,删除逗号(应该有逗号)怎么样?@reto:我需要逗号来区分例如A、A和AA。C={(A)、(A、AA)}?@user1240076在我的模式中添加了可选空格-请参见编辑。