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 对象的内容,设置了区域信息,并获取了标记子表达式的数量和语法标志。

目录
相关文章
|
2月前
|
算法 C++ 容器
C++标准库(速查)总结
C++标准库(速查)总结
76 6
|
2月前
|
存储 算法 C++
C++ STL 初探:打开标准模板库的大门
C++ STL 初探:打开标准模板库的大门
112 10
|
1天前
|
存储 对象存储 C++
C++ 中 std::array<int, array_size> 与 std::vector<int> 的深入对比
本文深入对比了 C++ 标准库中的 `std::array` 和 `std::vector`,从内存管理、性能、功能特性、使用场景等方面详细分析了两者的差异。`std::array` 适合固定大小的数据和高性能需求,而 `std::vector` 则提供了动态调整大小的灵活性,适用于数据量不确定或需要频繁操作的场景。选择合适的容器可以提高代码的效率和可靠性。
12 0
|
2月前
|
Java API 开发工具
API参考手册
【10月更文挑战第18天】API参考手册
49 2
|
2月前
|
存储 程序员 C++
C++常用基础知识—STL库(2)
C++常用基础知识—STL库(2)
74 5
|
2月前
|
存储 自然语言处理 程序员
C++常用基础知识—STL库(1)
C++常用基础知识—STL库(1)
70 1
|
3月前
|
编译器 API C语言
超级好用的C++实用库之跨平台实用方法
超级好用的C++实用库之跨平台实用方法
44 6
|
3月前
|
缓存 网络协议 Linux
超级好用的C++实用库之套接字
超级好用的C++实用库之套接字
35 1
|
5天前
|
人工智能 自然语言处理 API
Multimodal Live API:谷歌推出新的 AI 接口,支持多模态交互和低延迟实时互动
谷歌推出的Multimodal Live API是一个支持多模态交互、低延迟实时互动的AI接口,能够处理文本、音频和视频输入,提供自然流畅的对话体验,适用于多种应用场景。
37 3
Multimodal Live API:谷歌推出新的 AI 接口,支持多模态交互和低延迟实时互动
|
7天前
|
XML JSON 缓存
阿里巴巴商品详情数据接口(alibaba.item_get) 丨阿里巴巴 API 实时接口指南
阿里巴巴商品详情数据接口(alibaba.item_get)允许商家通过API获取商品的详细信息,包括标题、描述、价格、销量、评价等。主要参数为商品ID(num_iid),支持多种返回数据格式,如json、xml等,便于开发者根据需求选择。使用前需注册并获得App Key与App Secret,注意遵守使用规范。