gpt4 book ai didi

c++ - 将 regex_search 与 std::string 一起使用时的无限循环

转载 作者:行者123 更新时间:2023-11-28 02:16:00 25 4
gpt4 key购买 nike

为什么下面的代码会导致无限循环?

#include <boost/regex.hpp>

#include <iostream>
#include <string>

int main()
{
const std::string formula = "LAST_BID_EURUSD$ LAST_ASK_USDJPY$";

boost::smatch matches;
boost::regex expr("(LAST_(?:BID|ASK)_.+?\\$)");
while (boost::regex_search(formula, matches, expr))
{
std::cout << std::string(matches[1].first, matches[1].second) << std::endl;
}
}

如果我将迭代器传递给 formulabeginend 而不是 formula 本身并更新 相应地启动一个,一切都按预期工作:

#include <boost/regex.hpp>

#include <iostream>
#include <string>

int main()
{
const std::string formula = "LAST_BID_EURUSD$ LAST_ASK_USDJPY$";

auto start = formula.begin();
auto end = formula.end();

boost::smatch matches;
boost::regex expr("(LAST_(?:BID|ASK)_.+?\\$)");
while (boost::regex_search(start, end, matches, expr))
{
std::cout << std::string(matches[1].first, matches[1].second) << std::endl;
start = matches[0].second;
}
}

输出

LAST_BID_EURUSD$
LAST_ASK_USDJPY$

C++11 正则表达式也是如此。

它应该如何与 std::string 对象一起使用?

最佳答案

在第一个片段中,您一遍又一遍地进行相同的调用。

boost::regex_search(formula, matches, expr)

每次调用此调用都会给出相同的结果(即成功),这真的不足为奇。

在第二个片段中,每次循环都更新 start 迭代器,因此您正在搜索的“字符串”不断变小,直到最终搜索失败,并且循环终止。

boost::regex_search(start, end, matches, expr)

关于c++ - 将 regex_search 与 std::string 一起使用时的无限循环,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34017257/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com