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

Можно ли использовать $1 в regex_replace?

От чтения FCD для regex_replace (28.11.4) я могу только догадываться, что функция также может использовать части исходной строки для замены? Я не могу проверить ее с помощью gcc, это правильно?

using namespace std;
regex rx{ R"((\d+)-(\d+))" }; // regex: (\d+)-(\d+)
cout << regex_replace("123-456", rx, "b: $2, a:$1");
// "b: 456, a:123"

Как вы можете видеть, я полагаю, что $1 и $2 относятся к группам захвата(), а не \1 и \2, как в другом месте).

Обновить. Итак, я думаю, это вопрос из двух частей

  • Используется ли это использование групп захвата в заменяемом тексте?
  • Является синтаксисом ECMAScript по умолчанию, используя $ n? Или \ n?
4b9b3361

Ответ 1

В таблице 139 в FDIS С++ 2011 перечислены две константы, которые могут использоваться для влияния на правила, используемые для строки формата в regex_replace, format_default и format_sed. format_default описывается как использование "правил, используемых функцией замены ECMAScript в ECMA-262, часть 15.5.4.11 String.prototype.replace". Этот стандарт указывает на использование $ для обратных ссылок. См.: ECMA-262

Использование флага format_sed вместо этого использует правила для утилиты sed в POSIX. Sed не поддерживает $ обратные ссылки.

Ответ 2

Я был бы удивлен; $не находится в основном наборе символов источника (2.3). Документация Dinkumware для TR1 заявляет, что она действительно \1, и она зависит от диалекта.