基于范围的正则表达式匹配的 for 循环
Range-based for-loop over regex matches?
在 C++11 的最终草案中,基于范围的 for 循环可以通过一对迭代器指定要迭代的范围。 这使得迭代正则表达式的所有匹配项变得容易。 使用一对迭代器指定范围的功能后来被删除,并且在 C++11 中不存在。 是否还有一种简单的方法来迭代特定正则表达式的所有匹配项? 我希望能够做这样的事情:
std::regex begin(" 1?2?3?4* ");
std::regex end;
for(auto& match: std::pair(begin, end)) process(*match);
C++11 中是否支持这种事情?
为std::pair
这样做的问题在于,它"适用于"许多无效范围的事情。从而导致错误。
C++11 没有为此提供内置解决方案。您可以使用Boost.Range的make_iterator_range
工具轻松构建一个。再说一次,手动完成并不难:
template<typename T>
class IterRange
{
T start;
T end;
public:
IterRange(const T &start_, const T &end_) : start(start_), end(end_) {}
T begin() {return start;}
T end() {return end;}
};
template<typename T> IterRange<T> make_range(const T &start, const T &end) {return IterRange<T>(start, end);}
您仍然可以使用一对迭代器来指定要迭代的序列。语句本质上for(a: c)
遍历序列[begin(c), end(c))
。因此,您需要做的就是使用 match_results
对象或提供合适的 begin
和 end
函数来返回正则表达式迭代器类型之一。
相关文章:
- 使用正则表达式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++:匹配正则表达式,什么是匹配?
- 基于范围的正则表达式匹配的 for 循环