Могу ли я использовать $ 1 в regex_replace? - PullRequest
12 голосов
/ 11 октября 2011

Из чтения 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 ?

Ответы [ 2 ]

7 голосов
/ 21 октября 2011

В таблице 139 в FDIS C ++ 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 не поддерживает $ обратных ссылок.

1 голос
/ 11 октября 2011

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...