C++ 正则表达式库 std::basic_regex 中文手册(API说明来自cppreference.com)

简介: C++ 正则表达式库 std::basic_regex 中文手册(API说明来自cppreference.com)

C++ 正则表达式库 std::basic_regex

在头文件 中定义了模板类 basic_regex,它为容纳正则表达式提供了一个通用的框架。

template <
    class CharT,
    class Traits = std::regex_traits<CharT>
> class basic_regex;

(自 C++11 起)

对于常见的字符类型,提供了几个类型定义:

在头文件 中定义

类型 定义
std::regex std::basic_regex
std::wregex std::basic_regex<wchar_t>

成员类型

成员类型 定义
value_type CharT
traits_type Traits
string_type Traits::string_type
locale_type Traits::locale_type
flag_type std::regex_constants::syntax_option_type

成员函数

  • 构造函数:构造正则表达式对象
  • 析构函数:销毁正则表达式对象
  • operator=:赋值内容
  • assign:赋值内容

观察者

  • mark_count:返回正则表达式中标记的子表达式的数量
  • flags:返回语法标志

区域设置

  • getloc:获取区域信息
  • imbue:设置区域信息

修改器

  • swap:交换内容

常量

效果
icase 字符匹配应忽略大小写
nosubs 在执行匹配时,所有标记的子表达式(expr)都被视为非标记子表达式(?:expr)。在提供的 std::regex_match 结构中不存储匹配项,mark_count() 为零
optimize 指示正则表达式引擎加快匹配速度,可能会使构造变慢。例如,这可能意味着将非确定性有限状态自动机转换为确定性有限状态自动机
collate “[a-b]” 形式的字符范围将受区域设置影响
multiline (C++17) 如果选择了 ECMAScript 引擎,^ 应匹配一行的开头,$ 应匹配一行的末尾
ECMAScript 使用修改后的 ECMAScript 正则表达式语法
basic 使用基本的 POSIX 正则表达式语法
extended 使用扩展的 POSIX 正则表达式语法
awk 使用 POSIX 中的 awk 实用程序使用的正则表达式语法
grep 使用 POSIX 中的 grep 实用程序使用的正则表达式语法。这与 basic 选项基本相同,但新增了 newline ‘\n’ 作为 alternation 分隔符
egrep 使用带有 -E 选项的 POSIX 中的 grep 实用程序使用的正则表达式语法。这与 extended 选项基本相同,但新增了 newline ‘\n’ 和 ’

ECMAScript、basic、extended、awk、grep、egrep 中最多只能选择一个语法选项。如果没有选择语法,那么默认会选择 ECMAScript。其他选项作为修饰符,例如 std::regex("meow", std::regex::icase) 等价于 std::regex("meow", std::regex::ECMAScript|std::regex::icase)

在 basic_regex 中的成员常量是 namespace std::regex_constants 中定义的 syntax_option_type 常量的复制。

非成员函数

  • std::swap(std::basic_regex):专门化 std::swap 算法

以下是一个包含了各种用法的代码示例:

#include <regex>
#include <string>
#include <iostream>
int main() {
    // 创建一个 std::regex 对象
    std::regex reg("hello");
    
    // 使用 std::regex 对象进行匹配
    std::string s = "hello world";
    std::smatch m;
    if (std::regex_search(s, m, reg)) {
        std::cout << "Match found: " << m.str() << std::endl;
    }
    // 使用 assign() 修改 regex 对象的内容
    reg.assign("world");
    if (std::regex_search(s, m, reg)) {
        std::cout << "Match found: " << m.str() << std::endl;
    }
    // 使用 swap() 交换两个 regex 对象的内容
    std::regex reg2("goodbye");
    reg.swap(reg2);
    // 使用 imbue() 设置区域信息
    std::locale loc("C");
    reg.imbue(loc);
    // 使用 mark_count() 获取正则表达式中标记的子表达式数量
    std::cout << "Mark count: " << reg.mark_count() << std::endl;
    // 使用 flags() 获取语法标志
    std::cout << "Flags: " << reg.flags() << std::endl;
    return 0;
}

在这个示例中,我们创建了一个 std::regex 对象,然后使用它对字符串进行了匹配。我们还修改了 regex 对象的内容,交换了两个 regex 对象的内容,设置了区域信息,并获取了标记子表达式的数量和语法标志。

目录
相关文章
|
10月前
|
JSON 监控 API
掌握使用 requests 库发送各种 HTTP 请求和处理 API 响应
本课程全面讲解了使用 Python 的 requests 库进行 API 请求与响应处理,内容涵盖环境搭建、GET 与 POST 请求、参数传递、错误处理、请求头设置及实战项目开发。通过实例教学,学员可掌握基础到高级技巧,并完成天气查询应用等实际项目,适合初学者快速上手网络编程与 API 调用。
964 130
|
9月前
|
JSON API 数据格式
小红书API接口文档:笔记详情数据开发手册
小红书笔记详情API可获取指定笔记的标题、正文、互动数据及多媒体资源,支持字段筛选与评论加载。通过note_id和access_token发起GET/POST请求,配合签名验证,广泛用于内容分析与营销优化。
1923 3
|
9月前
|
API C++ Windows
Visual C++运行库、.NET Framework和DirectX运行库的作用及常见问题解决方案,涵盖MSVCP140.dll丢失、0xc000007b错误等典型故障的修复方法
本文介绍Visual C++运行库、.NET Framework和DirectX运行库的作用及常见问题解决方案,涵盖MSVCP140.dll丢失、0xc000007b错误等典型故障的修复方法,提供官方下载链接与系统修复工具使用指南。
1986 2
|
9月前
|
缓存 算法 程序员
C++STL底层原理:探秘标准模板库的内部机制
🌟蒋星熠Jaxonic带你深入STL底层:从容器内存管理到红黑树、哈希表,剖析迭代器、算法与分配器核心机制,揭秘C++标准库的高效设计哲学与性能优化实践。
C++STL底层原理:探秘标准模板库的内部机制
|
9月前
|
Ubuntu API C++
C++标准库、Windows API及Ubuntu API的综合应用
总之,C++标准库、Windows API和Ubuntu API的综合应用是一项挑战性较大的任务,需要开发者具备跨平台编程的深入知识和丰富经验。通过合理的架构设计和有效的工具选择,可以在不同的操作系统平台上高效地开发和部署应用程序。
331 11
|
9月前
|
IDE 编译器 开发工具
msvcp100.dll,msvcp120.dll,msvcp140.dll,Microsoft Visual C++ 2015 Redistributable,Visual C++ 运行库安装
MSVC是Windows下C/C++开发核心工具,集成编译器、链接器与调试器,配合Visual Studio使用。其运行时库(如msvcp140.dll)为程序提供基础函数支持,常因缺失导致软件无法运行。通过安装对应版本的Microsoft Visual C++ Redistributable可解决此类问题,广泛应用于桌面软件、游戏及系统级开发。
1115 2
|
10月前
|
并行计算 C++ Windows
|
编译器 C++ 开发者
【C++篇】深度解析类与对象(下)
在上一篇博客中,我们学习了C++的基础类与对象概念,包括类的定义、对象的使用和构造函数的作用。在这一篇,我们将深入探讨C++类的一些重要特性,如构造函数的高级用法、类型转换、static成员、友元、内部类、匿名对象,以及对象拷贝优化等。这些内容可以帮助你更好地理解和应用面向对象编程的核心理念,提升代码的健壮性、灵活性和可维护性。
|
编译器 C++ 容器
【c++11】c++11新特性(上)(列表初始化、右值引用和移动语义、类的新默认成员函数、lambda表达式)
C++11为C++带来了革命性变化,引入了列表初始化、右值引用、移动语义、类的新默认成员函数和lambda表达式等特性。列表初始化统一了对象初始化方式,initializer_list简化了容器多元素初始化;右值引用和移动语义优化了资源管理,减少拷贝开销;类新增移动构造和移动赋值函数提升性能;lambda表达式提供匿名函数对象,增强代码简洁性和灵活性。这些特性共同推动了现代C++编程的发展,提升了开发效率与程序性能。
573 12