迭代表示为 std::basic_string_view 的正则表达式子匹配
Iterating regex submatches represented as std::basic_string_view
有没有一种直接有效的方法将std::sub_match
转换为std::basic_string_view
(无需构造中间std::basic_string
,也无需中间堆分配(?或者更进一步的抽象级别,是否有替代std::regex_token_iterator
来迭代表示为std::basic_string_view
的正则表达式子匹配,而不是使用std
(C++17( 进行std::sub_match
?
我更喜欢使用std::basic_string_view
而不是std::sub_match
的原因是:
std::basic_string_view
是指类字符对象的恒定连续序列,序列的第一个元素位于位置零。这允许使用charconv
的std::from_chars
(令人惊讶的是,它没有使用ForwardIterator
s 实现(。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
的其余命名专业留给读者作为练习。
相关文章:
- 使用正则表达式regex_search在字符串中查找字符串
- 在 C++ 中使用正则表达式错误时出现问题 括号表达式中的范围无效
- C++正则表达式无限循环
- FindPackageHandleStandardArgs.cmake:137 的 CMake 错误(消息):找不到 Boost (缺少:正则表达式)(找到合适的版本"1.72.0",
- 定义有趣的宏和正则表达式在Z3 C++绑定
- 带有多个字符分隔符的正则表达式
- C++ 使用增强正则表达式库时断言崩溃
- 有人可以帮助我处理正则表达式吗?
- 使用正则表达式获取大括号块的列表
- 正则表达式以匹配数字的重复模式,后跟任何类型的分隔符?
- 组合正则表达式部分使用 | 不起作用的 C++
- 为什么C++正则表达式这么慢?
- 如何使HTML5电子邮件验证正则表达式在C++中工作?
- 在C++中实现正则表达式
- C++正则表达式替换整个单词
- 用C++编写正则表达式的正确方法是什么?
- 如何从Stroustrup的C++书中解释这个正则表达式?
- 为什么这个正则表达式C++在括号表达式中抛出无效范围异常?
- C++:匹配正则表达式,什么是匹配?
- C++:正则表达式匹配代码,打印多个匹配项?