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天前
|
存储 C++
C++的I/O流标准库
C++的I/O流标准库
18 2
|
2天前
|
存储 C++ 索引
C++标准库容器的使用
C++标准库容器的使用
11 1
|
2天前
|
存储 C++ 容器
C++标准库容器的基本用法
C++标准库容器的基本用法
10 0
|
5天前
|
缓存 Java API
Java常用库与API的深入探索
Java常用库与API的深入探索
|
9天前
|
存储 算法 C++
高效利用C++ STL库:标准模板库的使用技巧
本文介绍了C++ STL(标准模板库)的高效使用技巧,包括选择合适的容器类型、使用`emplace_back`而非`push_back`、预分配容器空间和范围for循环遍历容器。此外,还讨论了STL算法的运用,如用算法替代手动循环、使用lambda表达式和进行容器操作。通过这些技巧,开发者可以提升C++代码的性能和可读性。
|
9天前
|
存储 算法 C++
C++标准库深度探索
C++标准库深度探索
|
11天前
|
JSON Linux C语言
全网最权威唯一值得推荐的《C/C++框架和库》
关于C++框架、库和资源的一些汇总列表,内容包括:标准库、Web应用框架、人工智能、数据库、图片处理、机器学习、日志、代码分析等。
26 1
|
18天前
|
Python
Python 内置正则表达式库re的使用
正则表达式是记录文本规则的代码,用于查找和处理符合特定规则的字符串。在Python中,常通过原生字符串`r&#39;string&#39;`表示。使用`re.compile()`创建正则对象,便于多次使用。匹配字符串有`match()`(从开头匹配)、`search()`(搜索首个匹配)和`findall()`(找所有匹配)。替换字符串用`sub()`,分割字符串则用`split()`。
31 3
|
18天前
|
Python Windows
【Python进阶必备】一文掌握re库:实战正则表达式
【Python进阶必备】一文掌握re库:实战正则表达式
19 0
|
3天前
|
开发者 Python
Python 正则表达式
Python 正则表达式