我想做一个正则表达式的读取功能。C++

问题是当我使用函数regexp_search(string,match,regexp)找到第一个匹配词后,我试图删除找到匹配词之前字符串中的所有内容,但调用函数match.sffinx().str()返回emply字符串,而它应该返回该字符串中的其他单词。

这是我的正则表达式。

std::regex reg("([C-Fc-f]at)");

这是我的函数。

std::vector<string> stringToVector(string str, regex reg){
cout << boolalpha;
vector<string> vec;
smatch match;


while (regex_search(str, match, reg))
{
    vec.push_back(match.str(1));
    str = match.suffix().str();
}
return vec;}

解决方案:

你的代码似乎没有问题。 为了测试的目的,我首先修改了你的函数来输出结果……

std::vector<std::string> stringToVector(std::string str, std::regex reg) {
    std::vector<std::string> vec;
    std::smatch match;

    while (std::regex_search(str, match, reg))
    {
        std::cout << "Match\n";
        std::cout << "match.str() = " << match.str() << '\n';
        std::cout << "match.suffix() = " << match.suffix() << '\n';

        vec.push_back(match.str());
        str = match.suffix();
        std::cout << "str = " << str << "'\n\n";
    }
    return vec;
}

然后在 Main我叫 stringToVector 并打印出结果…

std::regex reg("([C-Fc-f]at)");

std::vector<std::string> v;
v = stringToVector("Cat fat rat bat", reg);

for (auto itr = v.begin(); itr != v.end(); ++itr)
{
    std::cout << *itr << '\n';
}

这是输出结果…

Match
match.str() = Cat
match.suffix() =  fat rat bat
str =  fat rat bat'

Match
match.str() = fat
match.suffix() =  rat bat
str =  rat bat'

Cat
fat

给TA打赏
共{{data.count}}人
人已打赏
未分类

在CentOS 7和TerraformKVM上使用Cloud-Init设置静态IP。

2022-9-23 8:15:16

未分类

"复制为cURL "的GET请求中包含cookie字段,而我还没有登录网站

2022-9-23 8:15:18

0 条回复 A文章作者 M管理员
    暂无讨论,说说你的看法吧
个人中心
购物车
优惠劵
今日签到
有新私信 私信列表
搜索