Игнорировать нотацию соответствия шаблону в C++11
На странице 1056 в 4-м издании языка программирования C++ Страуструп говорит, что маркер игнорирования под-шаблонов (?
Однако в boost::regex
это (?:
, Я подозреваю, что Страуструп может ошибаться, может кто-нибудь с копией стандарта сказать?
1 ответ
Похоже, это опечатка в книге. C++11 использует синтаксис регулярных выражений ECMA, который говорит, что ?:
создает группу без захвата. Эта информация на самом деле не соответствует стандарту C++.
Грамматика регулярного выражения, распознаваемая объектами basic_regex, созданными с помощью флага ECMAScript, соответствует ECMA-262, за исключением указанных ниже.
Есть некоторые исключения, но они не влияют на ваш вопрос. Вот цитата из EMCA-262
ПРИМЕЧАНИЕ 1. Скобки в форме (дизъюнкция) служат как для группировки компонентов шаблона дизъюнкции, так и для сохранения результата совпадения. Результат можно использовать либо в обратной ссылке (\, за которой следует ненулевое десятичное число), либо в ссылке на строку замены, либо в виде части массива из регулярного выражения, соответствующего внутренней процедуре. Чтобы запретить захват в скобках, используйте вместо этого форму (?: Дизъюнкция).