正则表达式以匹配排序的单词和至少一个

Regex to Match sorted words and at least one

我想知道是否有更简单的匹配单词序列的方法,至少有一个是强制性的。

为了简化事情,假设我的话是 A、B 和 C。我想匹配 A、B、C、AB、BC、AC,但对于 CA,它将是 C 和 A 分开匹配,顺序很重要。因此我想到了第一个想法:

A?B?C?

我发现的唯一问题是它也匹配空字符串,我得到了无效匹配。我想要的是一些更简单的方法:

(AB?C?|A?BC?|A?B?C)

在 ABCASDBC 中匹配:ABC、A、BC。 我真正的问题可能有更多的词,而且表达式会增长并且计算成本很高。这是我最关心的问题(也欢迎不使用正则表达式的不同解决方案)

(?=[xyz])x?y?z?

或者如果 x、y、z 不是字符:

(?=x|y|z)(?:x)?(?:y)?(?:z)?

我们的想法是首先使用正向先行来匹配这三个中的任何一个的存在,然后是订单本身的序列。