正则表达式误解或只是执行失败?

时间:2011-10-08 09:59:11

标签: c++ regex gcc c++11

我尝试了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?

1 个答案:

答案 0 :(得分:3)

C++-0x status of libstdc++可以看出,正则表达式支持不完整。 特别是match_results没有完成。迭代器甚至没有启动。

欢迎志愿者; - )

[编辑] [从gcc-4.9开始] 2将完全支持。