La mejor forma de explicar lo que buscas es con frases, ya que igualmente la lógica gobierna en las expresiones, algo así:
- Que acepte [ab] en minúsculas
- Que no existan repeticiones de [ab] inmediatamente
- Que permita la [Y] en cualquier posición y con repeticiones
Pienso que esas frases definen muy bien lo que estás buscando, sin embargo no es tan sencillo como parece, lo digo porque para evitar las repeticiones debes usar los grupos para "mirar" hacia adelante y hacia atrás y se puede tornar complejo.
Entonces, siguiendo la regla de que lo más simple debería funcionar y además de que la lógica se puede negar llegamos a esto:
Código PHP:
Ver original$t = 'ababab abYab YYYabab aabaa';
$r = '/(a|b)(?=\\1)/';
foreach ($s as $z) {
echo "- $z : $m\n";
}
Lo cual únicamente hace el matching de la repetición de [ab] con lo cual podemos descartar el ultimo valor "aabaa" negando lo que devuelve preg_match(), que para cuestiones practicas "resuelve" el problema.
Espero que eso te sirva un poco, más tarde hago el ejercicio completo a ver si consigo una expresión que valide todos los casos, a ver si no me vuelvo loco.