2016-08-08 9 views
1

こんにちは、stackoverflowコミュニティ!AABの同じ(同じ長さ)の順列に一致する正規表現

私はAABのすべての(同じ長さ)は、文字列置換を一致させたいので、私は一致させたい:

AAB 
BAA 
ABA 

ではなく:

ABB 
AB 
AABA 

私はすでに多くのソースが前後参照言及を発見しました[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

は3順列と一致するパターンです:1 Bがある

  • 文字列の長さが3(...)
  • です:

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

    このパターンがあることが必要です((?=.*B)ルックアヘッド)

  • A(?=(.*A){2})ルックアヘッド)

しかし、それほど単純ではない^(AAB|ABA|BAA)$でも動作しますか?

+0

恐ろしく、ありがとう!はい、単純な例では '^(AAB | ABA | BAA)$ 'はうまくいくでしょうが、最終的には3文字以上の単語に対して一般化したいと思います。今私はそうすることができる。 – d053420

+0

@ d053420素晴らしい!お役に立てて嬉しいです。 – GolfWolf

関連する問題