当必须反复进行捕获处理时,aregex_iterator是一个不错的选择。取消引用aregex_iterator将返回match_result。这对于条件捕获或具有相互依赖性的捕获非常有用。假设我们要标记一些C ++代码。鉴于:
enum TOKENS { NUMBER, ADDITION, SUBTRACTION, MULTIPLICATION, DIVISION, EQUALITY, OPEN_PARENTHESIS, CLOSE_PARENTHESIS };
我们可以令牌化这个字符串:const auto input = "42/2 + -8\t=\n(2 + 2) * 2 * 2 -3"s有regex_iterator这样的:
vector<TOKENS> tokens; const regex re{ "\\s*(\\(?)\\s*(-?\\s*\\d+)\\s*(\\)?)\\s*(?:(\\+)|(-)|(\\*)|(/)|(=))" }; for_each(sregex_iterator(cbegin(input), cend(input), re), sregex_iterator(), [&](const auto& i) { if(i[1].length() > 0) { tokens.push_back(OPEN_PARENTHESIS); } tokens.push_back(i[2].str().front() == '-' ? NEGATIVE_NUMBER : NON_NEGATIVE_NUMBER); if(i[3].length() > 0) { tokens.push_back(CLOSE_PARENTHESIS); } auto it = next(cbegin(i), 4); for(int result = ADDITION; it != cend(i); ++result, ++it) { if (it->length() > 0U) { tokens.push_back(static_cast<TOKENS>(result)); break; } } }); match_results<string::const_reverse_iterator> sm; if(regex_search(crbegin(input), crend(input), sm, regex{ tokens.back() == SUBTRACTION ? "^\\s*\\d+\\s*-\\s*(-?)" : "^\\s*\\d+\\s*(-?)" })) { tokens.push_back(sm[1].length() == 0 ? NON_NEGATIVE_NUMBER : NEGATIVE_NUMBER); }
现场例子
使用正则表达式迭代器的一个值得注意的陷阱是该regex参数必须为L值,而R值将不起作用:Visual Studio regex_iterator错误?
#include "servlet.hpp" namespace hi{ class hello : public servlet { public: void handler(request& req, response& res) { res.headers.find("Content-Type")->second = "text/plain;charse
本文向大家介绍C / C ++中的mbrtoc16()及其示例,包括了C / C ++中的mbrtoc16()及其示例的使用技巧和注意事项,需要的朋友参考一下 在本文中,我们将讨论C ++ STL中std::mbrtoc16()函数的工作,语法和示例。 什么是std::mbrtoc16()? std::mbrtoc16()函数是C ++ STL中的内置函数,在<cuchar>头文件中定义。此函数用
本文向大家介绍C / C ++中的mbrtoc32()及其示例,包括了C / C ++中的mbrtoc32()及其示例的使用技巧和注意事项,需要的朋友参考一下 在本文中,我们将讨论C ++ STL中std::mbrtoc32()函数的工作,语法和示例。 什么是std::mbrtoc32()? std::mbrtoc32()函数是C ++ STL中的内置函数,在<cuchar>头文件中定义。此函数用
本文向大家介绍C / C ++中的iswgraph()及其示例,包括了C / C ++中的iswgraph()及其示例的使用技巧和注意事项,需要的朋友参考一下 在本文中,我们将讨论C ++ STL中函数的工作,语法和示例。 iswgraph()是<cwctype>头文件下的函数。此功能用于检查给定的宽字符是否具有任何图形表示。该函数是函数isgraph的宽字符版本,位于<cctype>头文件下。
本文向大家介绍core-data Objective-C示例,包括了core-data Objective-C示例的使用技巧和注意事项,需要的朋友参考一下 示例 这是用于iOS 10+的简单但功能强大的核心数据设置。有两种访问核心数据的方法: viewContext。将viewContext只能从主线程,并且仅被用于读取。 强大的enqueueCoreDataBlock。所有写作都应使用完成enq
数组是同源数据的集合,以顺序格式排列。 在C中学习数组的概念非常重要,因为它是基本的数据结构。 在本节中,我们将介绍一些非常有用的数组程序,以便您深入了解C编程语言如何处理数组。 单阵列程序 这些程序是基本的,只涉及一个数组变量。 我们将学习如何在不同的情况下处理数组变量。 程序打印数组 程序以相反的顺序打印数组 用于计算数组总和的程序 用于计算阵列平均值的程序 编程以找到数组的最大元素 程序找到
本节内容包含以受控方式使用嵌套循环的示例。 我们可能会看到外环正在控制内环等。我们采用了最常见的例子。 C中的等边三角形印刷 C中的直角三角形打印 C中的上下三角打印 在C中自上而下打三角形 在C中自上而下直角三角形打印 弗洛伊德在C中的三角形印刷 Pascal在C中的三角形印刷