Как получить строку с шаблоном из std:: regex в VС++ 2010
Можно ли получить строку с регулярным выражением от std::regex
? Или я должен сохранить его в другом месте, если я захочу использовать его позже?
В boost вы можете сделать это:
boost::regex reg("pattern");
string p = reg.str();
или использовать < Оператор
cout << reg;
напечатает шаблон.
но в std::regex
нет str() или оператора <. Должен ли я сохранить мою строку в другом месте или я просто не могу ее найти?
В отладчике я вижу, что в std::regex
.
Ответы
Ответ 1
Я только посмотрел в N3225, раздел 28.4 (заголовок <regex>
синопсис), и действительно, шаблон basic_regex
не имеет функции-члена str
, и нет operator<<
.
В пункте 28.8/2 содержится небольшое представление об этом:
Объекты специализации типов basic_regex
отвечают за преобразуя последовательность charT
объект внутреннее представление. Не указано, какую форму это представления, и как это доступ к алгоритмам, которые работают регулярные выражения.
Я понимаю, что стандартный мандат basic_regex
может быть построен из const charT *
, но не требует, чтобы реализация сохраняла эту строку.
Ответ 2
Документы MSDN, похоже, показывают, что нет общедоступного способа извлечения шаблона регулярного выражения из построенного объекта, поэтому я бы сказал, что вы необходимо сохранить строку самостоятельно.