我有一个函数,它试图将给定的字符串与给定的正则表达式模式进行匹配。如果不匹配,它应该创建一个字符串指示这种情况,并包括失败的正则表达式模式和字符串内容。类似于这样:
bool validate_content(const std::string & str, const std::regex & pattern, std::vector<std::string> & errors)
{
if ( false == std::regex_match(str, pattern) )
{
std::stringstream error_str;
// error_str << "Pattern match failure: " << pattern << ", content: " << str;
errors.push_back(error_str.str());
return false;
}
return true;
}
然而,正如您所看到的,这条被注释的语句提出了一个难题:是否有可能恢复正则表达式对象的原始模式?
显然,有一个变通方法是提供原始模式字符串(而非或同时提供)正则表达式对象,然后使用它。 但是,我当然更希望不需要包含额外的工作来重新创建每次调用此函数时的正则表达式对象(每次调用函数都要重新解析模式的成本很高)或者将正则表达式模式连同正则表达式对象一起传递(容易出现拼写错误和错误,除非我提供一个为我执行此操作的包装器,这不太方便)。
我正在使用 Ubuntu 14.04 上的 GCC 4.9.2。