Что происходит, когда совпадения с регулярными выражениями перекрываются? - PullRequest
2 голосов
/ 14 февраля 2012

В C ++ 11, что происходит, если совпадения регулярного выражения имеют пересечения друг с другом? Например, если исходная строка равна "ababa", а регулярное выражение - "aba", сначала, если я итерирую совпадения регулярного выражения в строке, есть ли два совпадения или только одно? И затем, если я заменим все экземпляры "aba" на "C", используя regex_replace, каким будет конечный результат?

Я не могу проверить это, потому что у меня пока нет доступа к компилятору, который поддерживает регулярные выражения.

1 Ответ

2 голосов
/ 14 февраля 2012

Будет один матч, и результат замены будет Cba.

Пояснение:

  • Движок регулярных выражений запускается в первой позиции в строке.
  • Он пытается соответствовать aba и успешно.
  • Он заменяет aba на C (результат: Cba).
  • Он пытается снова сопоставить aba с текущей позиции (которая находится между C и ba).
  • Здесь происходит сбой (а также со следующей позиции (прямо перед конечной a) и следующей (в конце строки)).
  • Вот и все.
...