gpt4 book ai didi

c++ - 迭代表示为 std::basic_string_view 的正则表达式子匹配

转载 作者:行者123 更新时间:2023-11-30 01:37:00 29 4
gpt4 key购买 nike

有没有一种直接有效的方法来转换std::sub_matchstd::basic_string_view (没有构造中间 std::basic_string 并且没有中间堆分配)?或者更进一步的抽象级别,是否有 std::regex_token_iterator 的替代方案?用于迭代表示为 std::basic_string_view 的正则表达式子匹配而不是 std::sub_match使用 std (C++17)?

我更喜欢使用 std::basic_string_view 的原因在 std::sub_match是:

  • std::basic_string_view指的是一个常量连续的类字符对象序列,该序列的第一个元素位于位置零。这允许使用 charconvstd::from_chars (令人惊讶的是,它不是使用 ForwardIterator 实现的)。 std::sub_match 似乎并非如此,因为它表示为一对 BidirectionalIterator
  • std::basic_string_view具有更丰富的类似字符串的界面,在某些文件格式的特殊情况下可以促进额外的上下文敏感标记化。

最佳答案

没有通用的方法来检测迭代器是否连续。我们仍然可以处理已知的连续迭代器 - 例如 std::string:

std::string_view as_sv(std::ssub_match m) {
if(!m.matched) return {};
return { &*m.first, m.second - m.first };
}

处理 sub_match 的剩余命名特化留给读者作为练习。

关于c++ - 迭代表示为 std::basic_string_view 的正则表达式子匹配,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50676058/

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