gpt4 book ai didi

c++ - 如何将 boost regex_replace 与 lambda 函数一起使用?

转载 作者:行者123 更新时间:2023-11-30 02:21:24 25 4
gpt4 key购买 nike

我正在尝试使用 lambda 函数来调用 boost::regex_replacestd::string 上类型。我没有运气让所有类型都正确。

typedef boost::basic_regex<char> regex;
typedef boost::match_results<char> smatch;

std::string text = "some {test} data";
regex re( "\\{([^\\}]*)\\}" );
text = boost::regex_replace( text, re, [&](smatch const & what) {
return what.str();
});

我正在使用 typedef而不是标准名称,因为我有几个地方使用 typedef 的/模板化字符类型而不是固定类型。

在这段代码中我得到了这个错误:/usr/include/boost/regex/v4/match_results.hpp:68:77: error: no type named 'difference_type' in 'struct boost::re_detail::regex_iterator_traits<char>'
BidiIterator>::difference_type difference_type;

最佳答案

如果你有一个 C++11 兼容的编译器,你既不需要 Boost 也不需要 lambdas。

要实现相同的目标,您可以使用 std::regex :

#include <iostream>
#include <regex>

int main()
{
std::string text = "some {test} data {asdf} more";
std::regex re("\\{([^\\}]*)\\}");
std::string out;
std::string::const_iterator it = text.cbegin(), end = text.cend();
for (std::smatch match; std::regex_search(it, end, match, re); it = match[0].second)
{
out += match.prefix();
out += match.str(); // replace here
}
out.append(it, end);
std::cout << out << std::endl;
}

当然,对于简单的文本替换,您可以只使用 std::regex_replace() 但它不能接受仿函数,只能接受静态格式字符串,可以选择使用组占位符:

  std::string text = "some {test} data {asdf} more";
std::regex re("\\{([^\\}]*)\\}");
std::string out = std::regex_replace(text, re, "<$1>");

关于c++ - 如何将 boost regex_replace 与 lambda 函数一起使用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48365482/

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