知道为什么以下代码会打印“ 不匹配 ”?与编译器或库版本相关的东西?我用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;
}
答案 0 :(得分:0)
你有没有试过逃避()。在某些正则表达式实现中,您必须使用\(
进行分组。无论如何,你可能不需要它。
最基本的正则表达式是:
"[a-zA-Z]+day"
你会得到result[0]
答案 1 :(得分:0)
绝对是编译器的问题。我建议(因为你在Linux上,这使得它特别容易)只需换出<tr1/regex>
<boost/regex.hpp>
。命名空间也变为boost::
而不是std::tr1::
,但所有其他语法完全相同,它可以解决您的所有问题。
如果你不能使用助推器,这是一个完全不同的故事;但是在过去一年左右的时间里,大多数人/雇主/公司都更加友好。
另请注意,您的测试用例存在缺陷。你有一个循环,但它只会打印一个值。 regex_search
一次返回一个值,您需要继续使用新的搜索开始索引来调用它以获取所有结果。如果你说程序的输出是什么(vs“不匹配”),那么我会说你的代码中有错误。但是目前编写的代码 应该返回"Saturday"
或""
。