Можно ли использовать $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?
Ответы
Ответ 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
, и она зависит от диалекта.