This doesn't make any sense - a* cannot fail so you'll
never end up in the position to try the second
alternative.
/( (?: a | (?=c) ) )*/x
This means - match as many 'a'-s as you can and when
this becomes impossible try the second alternative -
if it machtes (a zero-width) you'll face an infinite
loop that you want to break - and you does this by
allowing only one such zero-width match to happen.