tr1 / regex的问题。打印相反的结果

时间:2012-04-09 18:45:51

标签: c++ regex tr1

知道为什么以下代码会打印“ 不匹配 ”?与编译器或库版本相关的东西?我用g ++ a.cpp编译。

#include <tr1/regex>
#include <iostream>
#include <string>

using namespace std;

int main()
{
   const std::tr1::regex pattern("(\\w+day)");

   std::string weekend = "Saturday and Sunday";

   std::tr1::smatch result;

   bool match = std::tr1::regex_search(weekend, result, pattern);

   if(match)
   {
      for(size_t i = 1; i < result.size(); ++i)
      {
         std::cout << result[i] << std::endl;
      }
   }else
    std::cout << "no match" << std::endl;

   return 0;
}

2 个答案:

答案 0 :(得分:0)

你有没有试过逃避()。在某些正则表达式实现中,您必须使用\(进行分组。无论如何,你可能不需要它。

最基本的正则表达式是:

"[a-zA-Z]+day"

你会得到result[0]

的结果

答案 1 :(得分:0)

绝对是编译器的问题。我建议(因为你在Linux上,这使得它特别容易)只需换出<tr1/regex> <boost/regex.hpp>。命名空间也变为boost::而不是std::tr1::,但所有其他语法完全相同,它可以解决您的所有问题。

如果你不能使用助推器,这是一个完全不同的故事;但是在过去一年左右的时间里,大多数人/雇主/公司都更加友好。

另请注意,您的测试用例存在缺陷。你有一个循环,但它只会打印一个值。 regex_search一次返回一个值,您需要继续使用新的搜索开始索引来调用它以获取所有结果。如果你说程序的输出是什么(vs“不匹配”),那么我会说你的代码中有错误。但是目前编写的代码 应该返回"Saturday"""