aaまたはbbで始まります。それで終わります(バックリファレンス)。そして、真ん中にはありません。
「または」とバックリファレンスaa.*?(?!aa).*?aa
がなくても問題ありませんが、それらでは機能しません。
(aa|bb).*?(?!\1).*?\1
echo preg_match("@(aa|bb).*?(?!\\1).*?\\1@", 'aaxxaaxaa'); // 1 ??
echo preg_match("@(aa|bb).*?(?!\\1).*?\\1@", 'aaxxxaa'); // 1
なにが問題ですか?