我在ubuntu 16.04 LTS上使用boost 1.62。 我在使用boost 1.53的Scientific Linux 7.2上使用相同的代码和文件,它正在运行。
这是代码的一部分:
boost::cmatch what ;
const boost::regex exp ("(\\w+).txt",boost::regex::perl);
if(boost::regex_match((*roc).second->getCalibrationFilePath().c_str(), what, exp, boost::match_extra))
{
std::cout<<__PRETTY_FUNCTION__<< " (*roc).second->getCalibrationFilePath().c_str() " << (*roc).second->getCalibrationFilePath().c_str() << std::endl;
std::cout<<__PRETTY_FUNCTION__<< "what[1] " << what[1] << std::endl;
std::cout<<__PRETTY_FUNCTION__<< "exp " << exp << std::endl;
calibrationFileRadix = what[1];
}
else
{
STDLINE("ERROR: Can't find the extension .txt in " + (*roc).second->getCalibrationFilePath(), ACRed);
continue;
}
应匹配的文件名类似于/path/file_name.txt,我希望将file_name.txt作为[1]。
我得到的输出是:
bool calibrationLoader :: loadAllCalibrationFiles()(* roc).second-&gt; getCalibrationFilePath()。c_str()CalGain_downstream_2016_04_05_3_0_4.txt
bool calibrationLoader :: loadAllCalibrationFiles()[1]pO���
bool calibrationLoader :: loadAllCalibrationFiles()exp(\ w +)。txt
或
bool calibrationLoader :: loadAllCalibrationFiles()(* roc).second-&gt; getCalibrationFilePath()。c_str()CalGain_downstream_2016_04_05_3_0_4.txt
bool calibrationLoader :: loadAllCalibrationFiles()[1]
bool calibrationLoader :: loadAllCalibrationFiles()exp(\ w +)。txt
谢谢!
ADD
我在http://www.regextester.com/测试了这个正则表达式:它使用(\ w +)。txt而不是(\ w +)表现出预期.txt