C++11正则表达式详解(regex_match、regex_search和regex_replace)

 更新时间:2022年09月29日 08:59:12   作者:林夕07  
正则表达式(regular expression)是计算机科学中的一个概念,又称规则表达式,下面这篇文章主要介绍了C++11正则表达式(regex_match、regex_search和regex_replace)的相关资料,需要的朋友可以参考下

在C++11中引入了正则表达式。

字符规则

先来了解一下这个字符的含义吧。

字符描述
\转义字符
$匹配字符行尾
*匹配前面的子表达式任意多次
+匹配前面的子表达式一次或多次
匹配前面的子表达式零次或一次
{m}匹配确定的m次
{m,}匹配至少m次
{m,n}最少匹配m次,最大匹配n次
字符描述
.匹配任意字符
x|y匹配x或y
[xyz]字符集合,匹配包含的任意一个字符
[^xyz]匹配未包含的任意字符
[a-z]字符范围,匹配指定范围内的任意字符
[^a-z]匹配任何不在指定范围内的任意字符

头文件:#include

regex_match

全文匹配,即要求整个字符串符合匹配规则,返回true或false

匹配“四个数字-一个或俩个数字”

#include <iostream>
#include <regex>
using namespace std;
 
int main()
{
    string str;
    cin >> str;
    //\d 表示匹配数字  {4} 长度4个   \d{1,2}表示匹配数字长度为1-2
    cout << regex_match(str, regex("\\d{4}-\\d{1,2}"));
    return 0;
}

匹配邮箱 “大小写字母或数字@126/163.com”

int main()
{
    string str;
    cout << "请输入邮箱:" << endl;
    while (cin >> str)//匹配邮箱
    {
        if (true == regex_match(str, regex("[a-zA-Z0-9]+@1(26|63)\\.com")))
        {
            break;
        }
        cout << "输入错误,请重新输入:" << endl;
    }
    cout << "输入成功!" << endl;
 
    return 0;
}

regex_search

搜索匹配,即搜索字符串中存在符合规则的子字符串。

用法一:匹配单个

#include <iostream>
#include <regex>
#include <string>
using namespace std;
 
int main()
{
    string str = "hello2019-02-03word";
    smatch match;//搜索结果
    regex pattern("(\\d{4})-(\\d{1,2})-(\\d{1,2})");//搜索规则  ()表示把内容拿出来
    if (regex_search(str, match, pattern))
    {    //提取 年 月 日
        cout << "年:" << match[1] << endl;
        cout << "月:" << match[2] << endl;
        cout << "日:" << match[3] << endl;
        //下标从1开始 下标0存的是符合这个搜索规则的起始位置和结束位置
    }
    return 0;
}

用法二:匹配多个

#include <iostream>
#include <regex>
#include <string>
using namespace std;
 
int main()
{
    //匹配多个符合要求的字符串
    string str = "2019-08-07,2019-08-08,2019-08-09";
    smatch match;
    regex pattern("(\\d{4})-(\\d{1,2})-(\\d{1,2})");
    string::const_iterator citer = str.cbegin();
    while (regex_search(citer, str.cend(), match, pattern))//循环匹配
    {
        citer = match[0].second;
        for (size_t i = 1; i < match.size(); ++i)
        {
            cout << match[i] << " ";
        }
        cout << endl;
    }
    return 0;
}

regex_replace

替换匹配,即可以将符合匹配规则的子字符串替换为其他字符串。

将字符串中的-替换为/

#include <iostream>
#include <regex>
using namespace std;
int main()
{
    //替换不会修改原串
    cout << regex_replace("2019-08-07", regex("-"), "/") << endl;
    return 0;
}

匹配以逗号分隔的字符串(\S表示匹配任意显示字符)

使用正则表达式将所有信息批处理为sql的语句

使用正则表达式1999-10-7 修改为 10/7/1999

先匹配上,再拿小括号获取值 然后替换

然后就可以放在程序中

int main()
{
    string str;
    cin >> str;
    cout << regex_replace(str, regex("(\\d{4})-(\\d{1,2})-(\\d{1,2})"), "$2/$3/$1");
 
    return 0;
}

将字符串中的/删掉

总结 

到此这篇关于C++11正则表达式(regex_match、regex_search和regex_replace)的文章就介绍到这了,更多相关C++11正则表达式内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • C语言strcpy库函数详解

    C语言strcpy库函数详解

    这篇文章主要为大家介绍了C语言strcpy库函数,具有一定的参考价值,感兴趣的小伙伴们可以参考一下,希望能够给你带来帮助
    2021-11-11
  • C++ 函数重载详情介绍

    C++ 函数重载详情介绍

    这篇文章主要介绍了C++ 函数重载详情,函数重载还有一个别名叫函数多态,函数多态是C++在C语言基础上的新特性,它可以让我们使用多个同名函数,下面来看看文章具体内容的介绍
    2021-11-11
  • C语言实现面向对象的方法详解

    C语言实现面向对象的方法详解

    这篇文章主要为大家详细介绍了C语言实现面向对象的方法,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下,希望能够给你带来帮助
    2022-08-08
  • C++实现LeetCode(88.混合插入有序数组)

    C++实现LeetCode(88.混合插入有序数组)

    这篇文章主要介绍了C++实现LeetCode(88.混合插入有序数组),本篇文章通过简要的案例,讲解了该项技术的了解与使用,以下就是详细内容,需要的朋友可以参考下
    2021-07-07
  • 一篇文章弄懂C++左值引用和右值引用

    一篇文章弄懂C++左值引用和右值引用

    左值(lvalue)和右值(rvalue)是 c/c++ 中一个比较晦涩基础的概念,这篇文章主要给大家介绍了关于如何通过一篇文章弄懂C++左值引用和右值引用的相关资料,需要的朋友可以参考下
    2021-07-07
  • C语言实现选择排序、直接插入排序、冒泡排序的示例

    C语言实现选择排序、直接插入排序、冒泡排序的示例

    这篇文章主要介绍了C++实现选择排序、直接插入排序、冒泡排序的代码示例,相当简洁直观,也是算法和数据结构学习中的基础,需要的朋友可以参考下
    2016-02-02
  • 简单介绍C语言中的umask()函数和truncate()函数

    简单介绍C语言中的umask()函数和truncate()函数

    这篇文章主要介绍了简单介绍C语言中的umask()函数和truncate()函数,是C语言入门学习中的基础知识,需要的朋友可以参考下
    2015-09-09
  • 纯C语言实现五子棋

    纯C语言实现五子棋

    本文给大家分享的是去年制作的一个纯C语言实现的五子棋的代码,虽然没有带漂亮的界面,还是推荐给大家,有需要的小伙伴可以参考下。
    2015-03-03
  • C语言实现动态版通讯录的示例代码

    C语言实现动态版通讯录的示例代码

    这篇文章主要为大家详细介绍了如何利用C语言实现一个简单的动态版通讯录,文中的示例代码讲解详细,对我们学习C语言有一定帮助,需要的可以参考一下
    2022-08-08
  • C++基于特征向量的KNN分类算法

    C++基于特征向量的KNN分类算法

    这篇文章主要为大家详细介绍了C++基于特征向量的KNN分类算法,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2018-12-12

最新评论