2016-08-08 3 views
1

Привет, сообщество stackoverflow!Regex для соответствия (одинаковой длины) перестановок 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). Regex на самом деле не лучший способ сделать что-то подобное. Если вы не хотите что-то простое, как '^ (AAB | BAA | ABA) $'. –

ответ

1

Вот образец, который соответствует трем перестановкам:

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

Эта модель требует, чтобы:

  • длина строки 3 (...)
  • есть один B ((?=.*B) lookahead)
  • Есть два A s ((?=(.*A){2}) lookahead)

Но не намного проще ^(AAB|ABA|BAA)$ также работать?

+0

Удивительный, спасибо! Да, '^ (AAB | ABA | BAA) $' был бы разработан для простого примера, но в конечном итоге я хочу обобщить его для слов с> 3 символами. Теперь я могу это сделать. – d053420

+0

@ d053420 Отлично! Рад, что смог помочь. – GolfWolf

Смежные вопросы