详解C++标准库中处理正则表达式的类std::regex

 更新时间:2024年03月27日 10:21:49   作者:铁松溜达py  
std?是?C++?标准库的命名空间,包含了大量标准的?C++?类、函数和对象,这些类和函数提供了广泛的功能,包括输入输出、容器、算法、字符串处理等,这篇文章主要介绍了C++标准库中提供的用于处理正则表达式的类std::regex,需要的朋友可以参考下
(福利推荐:【腾讯云】服务器最新限时优惠活动,云服务器1核2G仅99元/年、2核4G仅768元/3年,立即抢购>>>:9i0i.cn/qcloud

(福利推荐:你还在原价购买阿里云服务器?现在阿里云0.8折限时抢购活动来啦!4核8G企业云服务器仅2998元/3年,立即抢购>>>:9i0i.cn/aliyun

std 是 C++ 标准库的命名空间,包含了大量标准的 C++ 类、函数和对象。这些类和函数提供了广泛的功能,包括输入输出、容器、算法、字符串处理等。

通常,为了使用标准库中的对象和函数,需在代码中包含相应的头文件,比如 #include <iostream>。然后你就可以通过 std:: 前缀来使用其中的功能,比如 std::coutstd::cinstd::endl 等。

这种用法有助于防止命名冲突,因为 C++ 中可能会有多个库提供相同的名称。使用命名空间可以明确指定要使用的是标准库中的功能,而不是其他地方定义的同名功能。

C++ 标准库中常见的类、函数等:

1. 类:
   - `std::string`: 字符串处理类。
   - `std::vector`: 动态数组容器类。
   - `std::map`、`std::unordered_map`: 键值对映射容器类。
   - `std::fstream`: 文件输入输出类。
   - `std::deque`: 双端队列容器类。
   - `std::set`、`std::unordered_set`: 集合容器类。
   - `std::stack`、`std::queue`: 栈和队列容器适配器类。
   - `std::stringstream`: 字符串流类。

2. 函数:
   - `std::cout`、`std::cerr`: 控制台输出函数。
   - `std::cin`: 控制台输入函数。
   - `std::sort`: 容器排序函数。
   - `std::find`: 容器查找函数。
   - `std::max`、`std::min`: 返回两个值中较大或较小的值。
   - `std::accumulate`: 容器元素累加函数。
   - `std::copy`: 复制范围内元素到另一个范围函数。
   - `std::transform`: 容器元素转换函数。
   - `std::regex_search`: 正则表达式搜索函数。
   - `std::regex_match`: 正则表达式匹配函数。
   - `std::regex_replace`: 正则表达式替换函数。

3. 对象:
   - `std::endl`: 换行并刷新输出流对象。
   - `std::numeric_limits`: 数值类型极限值信息对象。
   - `std::allocator`: 动态内存分配器对象。
   - `std::cin.eof()`: 输入流对象函数,检查是否达到文件结束。
   - `std::nothrow`: 内存分配失败时返回空指针而不抛出异常的对象。
   - `std::random_device`: 真随机数生成对象。
   - `std::locale`: 控制 C++ 标准库本地化行为的对象。

这些类、函数和对象提供了丰富的功能,覆盖了输入输出、容器、算法、字符串处理、正则表达式等多个方面,为 C++ 程序员提供了强大的工具,可用于各种类型的应用开发。

------------

`std::regex` 是 C++ 标准库中提供的用于处理正则表达式的类。正则表达式是一种强大的模式匹配工具,它可以用于在字符串中进行复杂的搜索、替换等操作。`std::regex` 类提供了一种方式来创建、编译和使用正则表达式。

下面是 `std::regex` 类的一些重要成员函数和用法:

1. 构造函数:
   - `explicit regex(const char* fmt, flag_type flags = std::regex_constants::ECMAScript)`
   - `explicit regex(const std::string& fmt, flag_type flags = std::regex_constants::ECMAScript)`
   
   这些构造函数用于创建 `std::regex` 对象,接受一个正则表达式字符串作为参数,并可选择地指定匹配标志。

2. 成员函数 `match()` 和 `search()`:
   - `bool match(const std::string& s, std::regex_constants::match_flag_type flags = std::regex_constants::match_default) const`
   - `bool search(const std::string& s, std::regex_constants::match_flag_type flags = std::regex_constants::match_default) const`
   
   这两个成员函数分别用于在字符串中进行完全匹配(`match()`)和部分匹配(`search()`)。它们接受一个待匹配的字符串作为参数,并可选择地指定匹配标志。

3. 替换函数 `std::regex_replace()`:
   - `std::string regex_replace(InputIt first, InputIt last, const std::regex& re, const std::string& fmt, std::regex_constants::match_flag_type flags = std::regex_constants::match_default)`

   这个函数用于在范围 `[first, last)` 中搜索并替换满足正则表达式 `re` 的部分。替换的方式由参数 `fmt` 指定。

4. 正则表达式的语法:
   
   `std::regex` 支持多种正则表达式的语法,包括 ECMAScript、basic、extended 等等。你可以通过设置不同的标志来指定使用的语法。常见的标志包括:
   - `std::regex_constants::ECMAScript`:使用 ECMAScript 语法。
   - `std::regex_constants::basic`:使用基本正则表达式语法。
   - `std::regex_constants::extended`:使用扩展正则表达式语法。

这些只是 `std::regex` 类的一些常用成员函数和用法。借助这些函数,可方便地在字符串中进行正则表达式的搜索、替换等操作,实现了复杂文本处理的功能。

#include <iostream>
#include <regex>
#include <string>
int main() {
    // 原始字符串
    std::string text = "Hello, world!";
    // 定义正则表达式模式
    std::regex pattern("world");
    // 在文本中搜索模式
    if (std::regex_search(text, pattern)) {
        std::cout << "在文本中找到了匹配的模式!" << std::endl;
    }
    else {
        std::cout << "未找到匹配的模式!" << std::endl;
    }
    return 0;
}

/*std::regex:表示一个正则表达式对象。
std::smatch:保存匹配结果的容器,可以通过 std::regex_match 或 std::regex_search 函数填充。
std::regex_match:用于检查整个字符串是否与正则表达式匹配。
std::regex_search:在输入字符串中搜索与正则表达式匹配的内容。
std::regex_replace:用于在字符串中执行正则表达式替换操作。
std::regex_iterator:用于迭代一个字符串中所有与正则表达式匹配的子串。
std::regex_token_iterator:用于迭代一个字符串中与正则表达式匹配的子串及其非匹配部分。*/ 

#include <iostream>
#include <regex>
int main() {
    std::string text = "Hello, my email is example@email.com and my phone number is 123-456-7890.";
    std::regex emailRegex("[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\\.[a-zA-Z]{2,}");
    std::regex phoneRegex("\\d{3}-\\d{3}-\\d{4}");
    // Match email
    std::smatch emailMatch;
    if (std::regex_search(text, emailMatch, emailRegex)) {
        std::cout << "Email found: " << emailMatch.str() << std::endl;
    }
    // Match phone number
    std::smatch phoneMatch;
    if (std::regex_search(text, phoneMatch, phoneRegex)) {
        std::cout << "Phone number found: " << phoneMatch.str() << std::endl;
    }
    // Replace phone number
    std::string newText = std::regex_replace(text, phoneRegex, "XXX-XXX-XXXX");
    std::cout << "Text with phone number replaced: " << newText << std::endl;
    return 0;
}
/*std::regex:表示一个正则表达式对象。
std::smatch:保存匹配结果的容器,可以通过 std::regex_match 或 std::regex_search 函数填充。
std::regex_match:用于检查整个字符串是否与正则表达式匹配。
std::regex_search:在输入字符串中搜索与正则表达式匹配的内容。
std::regex_replace:用于在字符串中执行正则表达式替换操作。
std::regex_iterator:用于迭代一个字符串中所有与正则表达式匹配的子串。
std::regex_token_iterator:用于迭代一个字符串中与正则表达式匹配的子串及其非匹配部分。*/

到此这篇关于C++标准库中提供的用于处理正则表达式的类std::regex的文章就介绍到这了,更多相关C++标准库正则表达式std::regex内容请搜索程序员之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持程序员之家!

相关文章

  • C语言中十六进制转十进制两种实现方法

    C语言中十六进制转十进制两种实现方法

    这篇文章主要介绍了C语言中十六进制转十进制两种实现方法的相关资料,需要的朋友可以参考下
    2017-01-01
  • C++模拟2D牛顿力学效果的示例代码

    C++模拟2D牛顿力学效果的示例代码

    这篇文章主要为大家详细介绍了如何利用C++模拟2D牛顿力学效果,文中的示例代码讲解详细,具有一定的学习价值,感兴趣的小伙伴可以了解一下
    2023-06-06
  • C++中fstream,ifstream及ofstream用法浅析

    C++中fstream,ifstream及ofstream用法浅析

    这篇文章主要介绍了C++中fstream,ifstream及ofstream用法,适合C++初学者学习文件流的操作,需要的朋友可以参考下
    2014-08-08
  • C++?用红黑树模拟实现set、map的示例代码

    C++?用红黑树模拟实现set、map的示例代码

    set、map的底层结构是红黑树,它们的函数通过调用红黑树的接口来实现,本文主要介绍了C++?用红黑树模拟实现set、map,具有一定的参考价值,感兴趣的可以了解一下
    2024-03-03
  • 用C++实现一个命令行进度条的示例代码

    用C++实现一个命令行进度条的示例代码

    这篇文章主要介绍了用C++实现一个命令行进度条的示例代码,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2020-04-04
  • C++对Json数据的友好处理实现过程

    C++对Json数据的友好处理实现过程

    在Ajax的应用中,前台基本上会用到JSON作为数据交换格式,所以下面这篇文章主要给大家介绍了关于C++对Json数据的友好处理,文中通过实例代码介绍的非常详细,需要的朋友可以参考下
    2022-02-02
  • 简易Dota改键外挂程序制作

    简易Dota改键外挂程序制作

    利用全局钩子制作一个个性化的dota游戏改键功能,大家可以参考使用
    2013-11-11
  • 适合初学者练习的C语言实现三子棋小游戏

    适合初学者练习的C语言实现三子棋小游戏

    今天这篇文章主要介绍给大家分享一个适合初学者练习的利用C语言写三子棋小游戏,用简单的C语言来实现小时候玩的三子棋游戏,下面是人机对战,当然这个代码的电脑对手是人工智障而不是人工智能 详细内容就请跟小编一起来阅读下面文章内容吧
    2021-10-10
  • Qt实现编写SMTP客户端的示例详解

    Qt实现编写SMTP客户端的示例详解

    这篇文章主要介绍了如何通过Qt实现编写SMTP客户端,可以实现通过SMTP发送电子邮件(有文本,html,附件,内联文件等的MIME)。并支持SSL和SMTP身份验证,感兴趣的可以学习一下
    2022-11-11
  • Qt实现字幕滚动效果的示例代码

    Qt实现字幕滚动效果的示例代码

    这篇文章主要介绍了Qt如何利用QTimer实现字幕滚动功能,并且可以实现自行更改文本内容、自适应文本大小、自由调整速度等功能,感兴趣的可以学习一下
    2022-06-06

最新评论

?


http://www.vxiaotou.com