C++ 迭代表示为std::basic_string_视图的正则表达式子匹配

C++ 迭代表示为std::basic_string_视图的正则表达式子匹配,c++,c++17,tokenize,C++,C++17,Tokenize,是否有一种直接有效的转换方法(无需构造中间std::basic_string和中间堆分配)?或者更进一步的一个抽象级别,是否有替代方法来迭代表示为的正则表达式子匹配,而不是使用std(C++17) 我比较喜欢使用over的原因是: 指类似字符的对象的恒定连续序列,序列的第一个元素位于零位置。这允许使用的(令人惊讶的是,没有使用ForwardIterators实现)。对于,情况似乎并非如此,因为它表示为一对双向运算符 具有更丰富的类似字符串的接口,在某些文件格式的特殊情况下可促进额外的上下文敏感

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

我比较喜欢使用over的原因是:

  • 指类似字符的对象的恒定连续序列,序列的第一个元素位于零位置。这允许使用的(令人惊讶的是,没有使用
    ForwardIterator
    s实现)。对于,情况似乎并非如此,因为它表示为一对
    双向运算符
  • 具有更丰富的类似字符串的接口,在某些文件格式的特殊情况下可促进额外的上下文敏感标记化

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

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

      处理
      sub_match
      的其余命名专门化留给读者作为练习。

      是否需要匹配检查?或者:
      返回{&*m.first,m.length()}
      (如果不匹配,length将返回零)是。否则,
      和*m.first
      可能无效。