2016-08-08 61 views
1

你好,stackoverflow社区!正则表达式匹配(相同长度)的AAB排列

我想匹配所有(同一长度)AAB的串排列,所以我想匹配:

AAB 
BAA 
ABA 

但不是:

ABB 
AB 
AABA 

我已经找到许多来源提lookarounds和类似问题的反向引用,如[1][2],但我正在重复诸如“AA”之类的字符。

我曾尝试:

^(?=[AAB]{3}$)(?!.*(.).*\1).*$ 
^([AAB])(?!\1)([AAB])(?!\1|\2)([AAB])(?!\1|\2|\3)$ 

你对此有何想法?提前致谢!

+0

我有一种感觉,这可能是一个[XY问题](http://meta.stackexchange.com/questions/66377/what-is-the-xy-problem)。正则表达式并不是真正做这种事情的最佳方式。除非你想要'^(AAB | BAA | ABA)$'这样简单的东西。 –

回答

1

下面是三个置换相匹配的模式:

^(?=.*B)(?=(.*A){2})...$ 

这种模式要求:

  • 字符串的长度为3(...)
  • 有一个B(?=.*B) lookahead)
  • 有两个A s((?=(.*A){2})前瞻)

但不会更简单^(AAB|ABA|BAA)$还工作吗?

+0

太棒了,谢谢!是的,'^(AAB | ABA | BAA)$'本来可以用于这个简单的例子,但最终我想将它概括为大于3个字符的单词。现在我可以这样做了。 – d053420

+0

@ d053420太棒了!很高兴我能帮上忙。 – GolfWolf