我在一个类中有一个方法,它接受一个 QString,并且使用正则表达式,它返回包含在字符串中的第一个浮点数(正数或负数)。这是方法:
float MyClass::getNumberFromQString(const QString &xString)
{
QRegExp xRegExp("(-?\\d+(?:[\\.,]\\d+(?:e\\d+)?)?)");
xRegExp.indexIn(xString);
QStringList xList = xRegExp.capturedTexts();
if (true == xList.empty())
{
return 0.0;
}
return xList.begin()->toFloat();
}
它有效,但现在我需要避免使用 Qt 并仅使用 boost 来做同样的事情。我创建了一个使用 boost 的方法,但它不起作用:
#include <boost/regex.hpp>
#include <boost/spirit/include/qi.hpp>
// other class methods
float Importer::getNumberFromString(const std::string &sString)
{
float fElevation = 0.0f;
boost::regex e("(-?\\d+(?:[\\.,]\\d+(?:e\\d+)?)?)");
boost::smatch what;
if(boost::regex_match(sString, what, e, boost::match_extra)) {
if (false == what.empty()) {
boost::spirit::qi::parse(what[0].str().begin(), what[0].str().end(), fElevation);
}
}
return fElevation;
}
问题在于,给定两个方法的相同字符串值(例如“lpda_-30.dat”),Qt 版本可以工作,而 boost 版本则无法使用该boost::regex_match
功能。我已经复制了正则表达式,所以我不知道它为什么会失败。我必须先转换正则表达式才能使用它boost::regex
,否则代码有问题?