我尝试了regex_search
的一个非常简单的使用,并且无法理解为什么我没有得到匹配:
唉,gcc-C ++ 0x-implementation 4.5似乎不起作用,我收到链接错误here。
但这是我的gcc-4.7.0尝试,非常简单:
#include <iostream>
#include <string>
#include <regex>
using namespace std;
int main () {
regex rxWorld("world");
const string text = "hello world!";
const auto t0 = text.cbegin();
smatch match;
const bool ok = regex_search(text, match, rxWorld);
/* ... */
}
我想我应该在ok==true
中获得match
和的内容。为此,我将示例简化为一个非常简单的正则表达式。我先尝试稍微复杂一点。
但是,在/* ... */
打印代码说不然:
cout << " text:'" << text
<< "' ok:" << ok
<< " size:" << match.size();
cout << " pos:" << match.position()
<< " len:"<< match.length();
for(const auto& sub : match) {
cout << " ["<<(sub.first-t0)<<".."<<(sub.second-t0)
<< ":"<<sub.matched
<< "'"<<sub.str()
<< "']";
}
cout << endl;
输出结果为:
$ ./regex-search-01.x
text:'hello world!' ok:0 size:0 pos:-1 len:0
更新:我还尝试了regex_search(t0, text.cend(), match, rxWorld)
和const char* text
,没有变化。
`
我对regex_search
的理解是错误的吗?我感到非常困惑。或者它只是gcc?
答案 0 :(得分:3)
从C++-0x status of libstdc++可以看出,正则表达式支持不完整。 特别是match_results没有完成。迭代器甚至没有启动。
欢迎志愿者; - )
[编辑] [从gcc-4.9开始] 2将完全支持。