Подтвердить что ты не робот

Почему regex "([a-z]) ((?!\\1) [a-z])" соответствует строке "aa" в С++ 11?

Действительно работает

regex pattern("([a-z])((?!\\1)[a-z])");
cout << regex_match("aa", pattern) << endl;

выводит результат "1", но первая соответствующая группа - "a", и если вместо этого я запускаю

regex pattern("([a-z])((?!a)[a-z])");
cout << regex_match("aa", pattern) << endl;

Я получаю "0", как ожидалось.

Обратите внимание, что точно такое же регулярное выражение работает как ожидалось в Python 3, то есть работает

re.match("([a-z])((?!\\1)[a-z])", "aa")

не дает совпадений. Может кто-нибудь объяснить, что здесь происходит?

Просто для справки, я использую g++ (tdm64-1) 5.1.0 с флагами -O2 и -std = С++ 11.

4b9b3361

Ответ 1

Потому что это было прослушивание в GCC5.
Он работает, как ожидалось, в GCC6 и MSVC14.