正则表达式查找字符串中的任何字母排列

我有这个正则表达式:

([abc])(?!\1)([abc])(?!\2|\1)([abc]) 

在给定的字符串中找到“abc”(abc,acb,bac,bca,cab和cba)的任何排列,例如:

  aabbccabcabbccaassbbsdddbbsbdbabc 

那个正则表达式运行良好,但是现在我需要另一个正则表达式来做同样的但是所有的排列没有重复“abbc”(12种组合)

我需要在一个字符串中找到4个字符,其中包含一个“a”,两个“b”和一个“c”。 无论顺序如何,都必须连续。 (abbc,babc,bbca …)

我的问题与建议的问题不同,因为它有一个必须重复2次的角色

  1. Find [abc] 2. Find "a" or "c" if it is not in 1. Find "b" 3. Find "a" or "c" if it doesn't appear in 1. or 2. Find "b" if it is not alreday 2 times 4. Find "a" or "c" if it doesn't appear in 1. or 2 or 3. Find "b" if it is not alreday 2 times 

C#regex有一个称为平衡组的function,可用于计数。

你可以使用这个正则表达式( Regex Storm的工作示例 ):

 (?:(?a)|(?b)|(?c)){4}(?<-A>)(?<-B>){2}(?<-C>) 
  • (?a) – 匹配a并将其推送到名为A的堆栈。
  • (?<-A>) – 从堆栈A弹出
  • (?<-B>){2} – 从堆栈B弹出两次。

如果正则表达式引擎无法从堆栈中弹出,则匹配失败,因此这为我们提供了一种计算匹配字符的简便方法。

还有其他方法,包括可以在其他正则表达式(其他语言)中使用的方法,但是这种方法有一个好处,它可以很好地扩展并且没有重复:如果你想要7个字符,即4 A ,2 B和1 C ,这是一个微不足道的变化。