当前位置:

C++11:正则表达式regex_match、regex_search、regex_replace

访客 2024-01-05 585 0

在C11中引入了正则表达式。

字符规则

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

字符描述
\转义字符
$匹配字符行尾
*匹配前面的子表达式任意多次
匹配前面的子表达式一次或多次
匹配前面的子表达式零次或一次
{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>usingnamespacestd;intmain(){stringstr;cin>>str;//\d表示匹配数字{4}长度4个\d{1,2}表示匹配数字长度为1-2cout<<regex_match(str,regex("\\d{4}-\\d{1,2}"));return0;}

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

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

regex_search

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

用法一:匹配单个

#include<iostream>#include<regex>#include<string>usingnamespacestd;intmain(){stringstr="hello2019-02-03word";smatchmatch;//搜索结果regexpattern("(\\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存的是符合这个搜索规则的起始位置和结束位置}return0;}

用法二:匹配多个

#include<iostream>#include<regex>#include<string>usingnamespacestd;intmain(){//匹配多个符合要求的字符串stringstr="2019-08-07,2019-08-08,2019-08-09";smatchmatch;regexpattern("(\\d{4})-(\\d{1,2})-(\\d{1,2})");string::const_iteratorciter=str.cbegin();while(regex_search(citer,str.cend(),match,pattern))//循环匹配{citer=match[0].second;for(size_ti=1;i<match.size();i){cout<<match[i]<<"";}cout<<endl;}return0;}

regex_replace

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

将字符串中的-替换为/

#include<iostream>#include<regex>usingnamespacestd;intmain(){//替换不会修改原串cout<<regex_replace("2019-08-07",regex("-"),"/")<<endl;return0;}

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

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

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

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

然后就可以放在程序中

intmain(){stringstr;cin>>str;cout<<regex_replace(str,regex("(\\d{4})-(\\d{1,2})-(\\d{1,2})"),"$2/$3/$1");return0;}

将字符串中的/删掉

发表评论

  • 评论列表
还没有人评论,快来抢沙发吧~