C++11 正则表达式——基础知识介绍

C++11开始支持正则表达式,使得处理文本更加简洁方便。C++11 支持六种正则表达式语法:ECMAScript, basic(POSIX Basic Regular Expressions), extended(POSIX Extended Regular Expressions ), awk(POSIX awk) , grep(POSIX grep ), egrep(POSIX grep –E)。其中ECMAScript最为强大。

闲话不多说,首先来看正则表达式有哪些基本类型。

a) typedef basic_regex

b) typedef basic_regex

  1. match_results: 这个类包含了与给定正则表达式匹配的序列。当empty()成员返回true或者size()成员返回0,表明没有找到匹配项。否则,当empty()返回false,size()返回值>=1 表明发生了匹配。此外:match[0]: 代表整个匹配序列 ;match[1]:代表第一个匹配子序列 ;match[2]: 代表第二个匹配子序列,以此类推。match_results有如下特化方式:

a) typedef match_results

b) typedef match_results

c) typedef match_results

d) typedef match_results

  1. sub_match: 该模板类用来表示与一个已标记的子表达式匹配的序列。这个匹配是通过一个迭代器对来表示的,该迭代器对表明了已匹配的正则表达式的一个范围。可以特化为下面几种情况:

a) typedef sub_match

b) typedef sub_match

c) typedef sub_match

d) typedef sub_match

以上介绍了一种常用的类型,叙述可能比较抽象,后面会结合例子来介绍这些类型的用法,还是会比较好理解。

然后来认识一下操作正则表达式的一些常用算法。

template

bool regex_match(

const charT* str,

match_results

const basic_regex

match_flag_type flags = match_default);

regex_match 判断一个正则表达式(参数 e)是否匹配整个字符序列 str. 它主要用于验证文本。注意,这个正则表达式必须匹配被分析串的全部,否则函数返回 false. 如果整个序列被成功匹配,regex_match 返回 True.

template

basic_string

const basic_string

const basic_regex

const basic_string

match_flag_type flags = match_default);

regex_replace 在整个字符序列中查找正则表达式e的所有匹配。这个算法每次成功匹配后,就根据参数fmt对匹配字符串进行格式化。缺省情况下,不匹配的文本不会被修改,即文本会被输出但没有改变。

template

regex_search 类似于 regex_match, 但它不要求整个字符序列完全匹配。你可以用 regex_search 来查找输入中的一个子序列,该子序列匹配正则表达式 e.

迭代器介绍:正则表达式迭代器用来遍历这个正则表达式序列,通过一个迭代器区间来表示匹配的区间。

a) typedef regex_iterator

b) typedef regex_iterator

c) typedef regex_iterator

d) typedef regex_iterator

  1. regex_token_iterator:

a) typedef regex_token_iterator

b) typedef regex_token_iterator

c) typedef regex_token_iterator

Original: https://www.cnblogs.com/einyboy/p/3189167.html
Author: einyboy
Title: C++11 正则表达式——基础知识介绍

原创文章受到原创版权保护。转载请注明出处:https://www.johngo689.com/535406/

转载文章受原作者版权保护。转载请注明原作者出处!

(0)

大家都在看

  • 《Effective Modern C++》翻译–条款2: 理解auto自己主动类型推导

    条款2: 理解auto自己主动类型推导 假设你已经读过条款1关于模板类型推导的内容,那么你差点儿已经知道了关于auto类型推导的所有。 至于为什么auto类型推导就是模板类型推导仅…

    C++ 2023年5月29日
    058
  • vs2019恢复为c++的布局

    工具 -》导入导出设置 -》重置所有设置 -》备份当前设置后下一步 -》 选择一个默认设置集合 Original: https://www.cnblogs.com/bigben01…

    C++ 2023年5月29日
    061
  • VC++.net 整合开发环境使用技巧

    VC++.net 整合开发环境使用技巧 在下面我将会以条目的形式为大家描述VC.net2003的各项使用技巧,你完全可以挑选你感兴趣的内存来看,甚至不看都无所谓哈,只求你的一点支持…

    C++ 2023年5月29日
    056
  • Model/View结构(整理自<Qt5.9 C++开发指南>)

    数据模型 数据不仅可以存储在数据模型中,数据可以是其他类,文件,数据库或任何数据源. 视图组件 那些带View的类; 在显示数据时,调用setModel()函数,为自己设置一个数据…

    C++ 2023年5月29日
    064
  • c++ 异常 warning: ‘MEMORY_UNIT_NAME’ defined but not used

    是开关的问题 , 将 #-g -O2 -pipe -W -Wall -Werror -fPIC -Wno-deprecated c++ 去掉。不检查。 Original: http…

    C++ 2023年5月29日
    068
  • Modern C++ 模板通用工厂

    Modern C++ 模板通用工厂 1 简单应用示例 1.1 示例代码 1.2 分析说明 2 简单工厂模式 2.1 示例代码 2.2 分析说明 3 工厂 + 静态注册 3.1 示例…

    C++ 2023年5月29日
    065
  • 从OSG源码学习C++之ArgumentParser

    待续 posted @2020-09-05 07:09 焦涛 阅读(409 ) 评论() 编辑 Original: https://www.cnblogs.com/Joetao/a…

    C++ 2023年5月29日
    055
  • C++面试题1

    1,LeetCode给出一个 32 位的有符号整数,将这个整数中每位上的数字进行反转; 2,怎么判断一个变量是指针; Original: https://www.cnblogs.c…

    C++ 2023年5月29日
    053
  • 聊聊 C++ 大一统的初始化运算符 {}

    一:背景 最近发现 C++ 中的类型初始化操作,没有 {} 运算符搞不定的,蛮有意思,今天我们就来逐一列一下各自的用法以及汇编展现,本来想分为 &#x503C;&#…

    C++ 2023年5月29日
    028
  • c++11 thread

    官方例子 // thread example #include // std::cout #include // std::thread #include using namesp…

    C++ 2023年5月29日
    070
  • [C++] 引用

    引用的特点 通常意义上的引用是”左值引用”,(相对于右值引用,即 rvalue reference)。 引用是语法糖,变量别名。声明一个引用,不是新定义了一…

    C++ 2023年5月29日
    047
  • c++ 二进制方式读取文件 读取特殊类型数据

    1 #include 2 #include 3 using namespace std; 4 5 /* 6 二进制方式进行读写文件,可以读写 各种各样数据类型的数据 7 */ 8 …

    C++ 2023年5月29日
    072
  • 玩转cocos2d-x lua-binding, 实现c++与lua混合编程

    引言 城市精灵GO(http://csjl.teamtop3.com/)是一款基于cocos2d-x开发的LBS社交游戏, 通过真实地图的探索, 发现和抓捕隐匿于身边的野生精灵, …

    C++ 2023年5月29日
    051
  • C++教程详解

    第一篇:基础篇 简介、环境配置、基本语法、注释、数据类型、变量类型、变量作用域、常量、修饰符类型、 存储类、运算符、循环、判断、函数、数字、数组、字符串、指针、引用、日期&…

    C++ 2023年5月29日
    079
  • 收藏的博客 — Qt/C++学习

    Qt Creator环境: 使用Qt Creator作为Linux IDE,代替Vim:实现两台Linux电脑远程部署和调试(一台电脑有桌面系统,一台电脑无桌面系统) 使用Qt C…

    C++ 2023年5月29日
    045
  • 【C++服务端技术】智能锁

    #pragma once #include namespace Extralib { namespace Thread { /* * 利用对象生存周期自动加解锁,比较安全 */ c…

    C++ 2023年5月29日
    047
亲爱的 Coder【最近整理,可免费获取】👉 最新必读书单  | 👏 面试题下载  | 🌎 免费的AI知识星球