热门标签 | HotTags
当前位置:  开发笔记 > IOS > 正文

c++11中regex正则表达式示例简述

这篇文章主要给大家介绍了关于c++11中regex正则表达式的相关资料,文中通过示例代码介绍的非常详细,对大家学习或者使用c++11具有一定的参考学习价值,需要的朋友们下面来一起学习学习吧

regex库中涉及到的主要类型有:

  • 以std::string为代表的处理字符串的类型(我们知道还有存储wchar_t的wstring类、原生c式字符串const char*等等,为了简化处理仅介绍std::string类型相关的操作,当你把握住了regex的主脉络之后,想使用其他的版本只要类比就可以)
  • std::regex类,该类型需要一个代表正则表达式的字符串和一个文法选项作为输入,当文法选项不提供时默认为ECMAScript。
  • std::match_results类,该类用来记录匹配的结果,这是一个模板类,该类的模板参数是一个迭代器类型,对于std::string来说我们定义了smatch作为match_results作为别名。
  • std::sub_match类,该类其实封装了两个迭代器,第一个代表开始部分,第二个代表结束部分,就像你用两个下表索引去表达一个字符串的某一个子串一样。这个类就是通过这样的方式提供原字符串的某一个子串作为结果。实际上match_results中就封装了一些std::sub_match类型的对象。(为什么是一些而不是一个,因为一次匹配可能会产生多个结果返回,regex认为每个括号对构成一个子匹配项,regex匹配的结果可以显式每个子匹配项匹配到的内容。)
  • 现在我们有了表达字符串的类,表达正则匹配的类,表达匹配结果的类,接下来regex提供三个匹配函数:
bool std::regex_match(...)
bool std::regex_search(...)
string std::regex_replace(...)//实际上返回类型是根据你输入的数据类型对应的basic_string类。

首先说明三个函数功能上的不同,std::regex_match是全文匹配,即它希望你输入的字符串要和正则表达式全部匹配,才认为匹配成功,否则匹配失败,而std::regex_search是在你输入的字符串中不断搜索符合正则表达式描述的子字符串,然后将第一个匹配到的子字符串返回。std::regex_replace是在std::regex_search的基础上更进一步,可以将匹配的子字符串替换为你提供的字符串。

看几个例子:

#include 
#include 
#include 

int main() {
 std::regex pattern("\\d{4}");
 std::string content("hello_2018");
 std::smatch result;
 if (std::regex_match(content, result, pattern)) {
 std::cout <

匹配失败,什么都不会输出。

这里说明一下为什么输出的是result[0],其实result[0]返回的就是一个sub_match类型的对象。regex中认为正则表达式的每个括号对构成一个子匹配项,并认为整个字符串作为0号子匹配项,然后根据左括号出现的位置,从1号开始编号,因此返回的result[0]就是匹配整个正则表达式的字符串。

#include 
#include 
#include 

int main() {
 std::regex pattern("\\d{4}");
 std::string content("hello_2018 by_2017");
 std::smatch result;
 if (std::regex_search(content, result, pattern)) {
 std::cout <

搜索到第一个符合正则表达式的子串,输出 2018。

#include 
#include 
#include 

int main() {
 std::regex pattern("\\d{4}");
 std::string content("hello_2018 by_2017");
 std::smatch result;

 auto begin = content.cbegin();
 auto end = content.cend();
 while (std::regex_search(begin, end, result, pattern)) {
 std::cout <

用上述方式可以输出字符串中所有符合正则表达式匹配要求的字符串,输出 2018 2017。

#include 
#include 
#include 

int main() {
 std::regex pattern("\\d{4}");
 std::string content("hello_2018 by_2017");

 std::string result = std::regex_replace(content, pattern, "everyone");
 std::cout <

输出 hello_everyone by_everyone。

以上就是c++11提供的regex模块的主要脉络,其余的关于对const char* 、wcahr_t类型的支持,以及regex_iterator、regex_token_iterator等迭代器的使用,以及掌控正则表达式行为方式的syntax_option_type的详细内容,等你需要去了解的时候去看官网的详解,相信学起来并不难。

总结

以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作具有一定的参考学习价值,谢谢大家对的支持。


推荐阅读
  • 如何在三星905s3g上设置U盘启动BIOS
    本指南详细介绍了如何在三星905s3g笔记本电脑上通过BIOS设置U盘启动的方法。 ... [详细]
  • 神策数据分析基础
    本文介绍了基于用户行为的数据分析方法,包括业务问题的提出与定义、具体行为的识别及统计分析流程。同时,详细阐述了如何利用事件模型(Event Model)来描述用户行为,以及在实际应用中的案例分析。 ... [详细]
  • 如何高效学习鸿蒙操作系统:开发者指南
    本文探讨了开发者如何更有效地学习鸿蒙操作系统,提供了来自行业专家的建议,包括系统化学习方法、职业规划建议以及具体的开发技巧。 ... [详细]
  • 本文详细介绍了个人电脑的组装流程,从基础的机箱准备到复杂的系统安装,每一步都提供了详细的指导,旨在帮助DIY爱好者顺利完成自己的电脑组装。 ... [详细]
  • egg实现登录鉴权(七):权限管理
    权限管理包含三部分:访问页面的权限,操作功能的权限和获取数据权限。页面权限:登录用户所属角色的可访问页面的权限功能权限:登录用户所属角色的可访问页面的操作权限数据权限:登录用户所属 ... [详细]
  • 本文介绍了用户界面(User Interface, UI)的基本概念,以及在iOS应用程序中UIView及其子类的重要性和使用方式。文章详细探讨了UIView如何作为用户交互的核心组件,以及它与其他UI控件和业务逻辑的关系。 ... [详细]
  • 题目概述:Sereja 拥有一个由 n 个整数组成的数组 a1, a2, ..., an。他计划执行 m 项操作,这些操作包括更新数组中的特定元素、增加数组中所有元素的值,以及查询数组中的特定元素。 ... [详细]
  • 题目描述:Balala Power! 时间限制:4000/2000 MS (Java/Other) 内存限制:131072/131072 K (Java/Other)。题目背景及问题描述详见正文。 ... [详细]
  • 本文由chszs撰写,详细介绍了Apache Mina框架的核心开发流程及自定义协议处理方法。文章涵盖从创建IoService实例到协议编解码的具体步骤,适合希望深入了解Mina框架应用的开发者。 ... [详细]
  • 本文针对HDU 1042 N! 问题提供详细的解析和代码实现。题目要求计算给定整数N(0 ≤ N ≤ 10000)的阶乘N!。文章不仅提供了算法思路,还附上了C++语言的具体实现。 ... [详细]
  • 该问题描述了以不同价格购买三种类型的鸡(公鸡、母鸡和小鸡),使用100元恰好购买100只鸡的不同组合。具体而言,每只公鸡价值5元,每只母鸡价值3元,而每三只小鸡价值1元。问题是,如何用100元购买100只鸡,并找出所有可能的公鸡、母鸡和小鸡的组合。 ... [详细]
  • LeetCode 102 - 二叉树层次遍历详解
    本文详细解析了LeetCode第102题——二叉树的层次遍历问题,提供了C++语言的实现代码,并对算法的核心思想和具体步骤进行了深入讲解。 ... [详细]
  • 本文提供了一个详尽的前端开发资源列表,涵盖了从基础入门到高级应用的各个方面,包括HTML5、CSS3、JavaScript框架及库、移动开发、API接口、工具与插件等。 ... [详细]
  • 深入理解iOS中的链式编程:以Masonry为例
    本文通过介绍Masonry这一轻量级布局框架,探讨链式编程在iOS开发中的应用。Masonry不仅简化了Auto Layout的使用,还提高了代码的可读性和维护性。 ... [详细]
  • 如何高效渲染JSON数据
    本文介绍了在控制器中返回JSON结果的方法,并详细说明了如何利用jQuery处理和展示这些数据,为Web开发提供了实用的技巧。 ... [详细]
author-avatar
myldd
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有