我怎样才能最好地定义给定集合的元素之间的一组所需组合,例如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}的元素集时区分单词。但是,实现分隔符会使表达式过于复杂,因此很难生成并在之后读取。
有人可能会为此实现一种特殊语言,但也许有另一种更简单的方法可以做到这一点吗?
答案 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)
等模式。
由于分隔符是正则表达式的一部分,因此添加它是微不足道的。
如果您有多个分隔符,则可以使用字符类(如果您同时使用,
和[,./]
,.
也可能变为/
。
如果您需要解析分层数据表示,那么正则表达式可能不是您正在寻找的。