希望有人能回答这个问题。这是一些示例代码。
namespace std {
#ifdef UNICODE
typedef wstring tstring;
typedef wstringstream tstringstream;
#define tcout std::wcout
#else
typedef string tstring;
typedef stringstream tstringstream;
#define tcout std::cout
#endif
typedef regex_iterator<std::tstring::const_iterator> TRegexIterator;
}
std::TRegexIterator::regex_type nPattern(_TEXT("-?[0-9]+(\\.[0-9]+)?((e|E)(\\+|-)[0-9]+)?"));
std::match_results<std::tstring::const_iterator> theMatches;
std::tstring test(_TEXT("-1.323E-23"));
tcout << _TEXT("Lvalue target string") << std::endl;
if (std::regex_match(test, theMatches, nPattern))
{
for (auto i= 0; i < theMatches.size(); ++i)
tcout << theMatches[i] << std::endl;
}
tcout << _TEXT("Rvalue target string") << std::endl;
if (std::regex_match(std::tstring(_TEXT("-1.323E-23")), theMatches, nPattern))
{
for (auto i= 0; i < theMatches.size(); ++i)
tcout << theMatches[i] << std::endl;
}
好的,所以我遇到的问题是带有右值目标字符串的第一个匹配结果是
“1.323E-23”(是的,带有起始空格)而不是预期的“-1.323E-23”。我认为这是因为“std::match_results”存储指针而不是数据,但在这种情况下,为什么“std::regex_match”的第一个参数是“const std::string&”?(这是我从 Intellisense 验证的)。“std::string&”似乎更合适。我正在使用 VS11 beta C++ 编译器。