使 C++ 正则表达式字符串捕获工作。我已经尝试过 Windows 与 Linux、Boost 与原生 C++ 0x11 的所有四种组合。示例代码是:
#include <string>
#include <iostream>
#include <boost/regex.hpp>
//#include <regex>
using namespace std;
using namespace boost;
int main(int argc, char** argv)
{
smatch sm1;
regex_search(string("abhelloworld.jpg"), sm1, regex("(.*)jpg"));
cout << sm1[1] << endl;
smatch sm2;
regex_search(string("hell.g"), sm2, regex("(.*)g"));
cout << sm2[1] << endl;
}
最接近的是 g++ (4.7) 和 Boost (1.51.0)。在那里,第一个 cout 输出预期的abhelloworld.
结果,但第二个 cout 没有输出。
g++ 4.7 与 -std=gnu++11 而<regex>
不是不<boost/regex.hpp>
产生输出。
使用本机的 Visual Studio 2012 会<regex>
产生关于不兼容字符串迭代器的异常。
带有 Boost 1.51.0 的 Visual Studio 2008 并<boost/regex.hpp>
产生关于“标准 C++ 库无效参数”的异常。
这些是 C++ 正则表达式中的错误,还是我做错了什么?