2016-08-08 106 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