正则表达式检查不重复的一组字符

CAF*_*FxX 5 regex permutation superset

假设我有一组字符[ABC].我正在寻找一个正则表达式,它可以匹配超集的任何排列,除了空集,即

ABC ACB BAC BCA CAB CBA
AB BC AC CB CA BA
A B C
Run Code Online (Sandbox Code Playgroud)

正则表达式应该(显然)与空字符串匹配.

ps表达相同目标的另一种方法是"匹配至少包含一次集合中每个字符的任何非空字符串".

更新:集合[ABC]只是一个例子,因为真实集合也可能更大.有了这个问题,我希望找到一个"通用"的解决方案而不是特定的解决方案[ABC].

anu*_*ava 6

我相信这可以通过正则表达式来解决.使用这个正则表达式:

/^([ABC])(?!\1)([ABC])?(?!\1|\2)[ABC]?$/
Run Code Online (Sandbox Code Playgroud)

如果您需要在线演示,请告诉我.


CAF*_*FxX 3

感谢您的回答(尤其是 anubhava 和 codaddict 的),我能够找到这个解决方案,我认为它非常优雅,因为它允许仅输入一次集合:

\b(([ABC])(?!.*\2))+\b
Run Code Online (Sandbox Code Playgroud)

需要\b匹配完整的单词;省略它们也会找到符合所需属性的子词。要匹配完整的字符串,您显然会这样做:

^(([ABC])(?!.*\2))+$
Run Code Online (Sandbox Code Playgroud)