4

知道为什么下面的代码会打印“不匹配”吗?与编译器或库版本有关的东西?我用 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;
}
4

2 回答 2

0

您是否尝试过转义 ()。在某些正则表达式实现中,您必须\(用于分组。无论如何,您可能不需要它。

最基本的正则表达式是:

"[a-zA-Z]+day"

你会得到结果result[0]

于 2012-04-09T19:21:42.883 回答
0

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

如果你不能使用 boost,那就完全不同了。但在过去一年左右的时间里,大多数人/雇主/公司都对提升更加友好。

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

于 2012-04-10T01:23:56.877 回答