irpas技术客

C++正则表达式_三木ぃ_c++ 正则表达式

大大的周 3752

C++正则表达式

表达式:

一般字符:可匹配目标序列中相同的字符通配符 . :可匹配目标序列中除了换行符外的任何字符[expr]形式表达式: 可以匹配目标序列中包含在表达式expr定义集内的字符或者排序规则表达式,采用 [^**expr],**可匹配目标序列中未包含在表达式expr定义集中的字符或排序规则。

单个字符 : 如 [A] 匹配 A。

ch1 - ch2形式的字符域: 如 [A-F]匹配大写A到F中的任何一字母。

**[:name:]形式字符类: [[ :alpha:]]**匹配一个字母(不区分大小写)。

字符类名说明alnum字母(不区分大小写)和数字alpha字母(不区分大小写)blank空格或制表符cntrl文件格式转义字符digit数字graph字母(不区分大小写) 、数字、英文标点lower小写字母upper大写字母print字母(不区分大小写)、数字、英文标点和空格punct英文标点space空格xdigit表示十六进制字符(abcdefABCDEF)d与digit相同s与space相同w与alnum相同
定位点:定位点**^匹配目标序列的开头,$**可匹配目标序列的末尾。定点可匹配目标字符串的位置,而不匹配字符。转义序列: 文件格式转移:

\、\f、\n、\r、\t 和 \v 分别表示匹配目标序列中的反斜杠、换页符、回车符、水平制表符和垂直制表符

DSW字符转义:

转义序列等效命名类默认命名类\d[ [:d:] ][[:digit:]]\D[^[: D : ]][^[: digit :]]\s[[: s :]][[: space :]]\S[^[: S :]][^[: space :]]\w[[: w :]][a-zA-Z0-9]\W[^[: W :]][^a-zA-Z0-9 ]

8进制数转义: \ooo, ‘ooo’表示三位八进制数目,如\101匹配字符A

16进制转义: \xhh , “hh”表示两位十六进制, 如\x41 匹配字符A

Unicode转义: \uhhhh, “hhhh”表示思维十六进制数,如\u0041匹配字符A

量词:

指定要匹配的表达式出现的次数,如:x{1,1}表示必须匹配一个x,x{1,3}可以匹配1-3个x。 量词含义E?匹配0次或者1次E(表达式),等价于E{0,1}E+至少匹配一次E,等价于E{1,}E*匹配0次或者多次E,等价于E{0,}E{n}匹配n次E,等价于E{n,n}E{n, }至少匹配n次EE{, n}至多匹配n次EE{n,m}至少匹配n次。至多匹配m次

例如:[A-C]+ 可以匹配“AAA”, “C”

断言

断言含义\b一个单词的边界\B一个非单词的边界(?=E)表达式后面紧跟着E才匹配成功,但不会改名目标序列中匹配的位置(?!E)表达式后面紧跟着E才匹配成功,但不会改名目标序列中匹配的位置(?:E)

例如:\bmail\b 匹配就是一个单词mail,This is a T(?!est):如果T后面没有est就匹配,主要用于替换, This is a T(?=est) 表示如果T 后面有est 就匹配,这主要用于替换

实例

在C++中正则表达式需要用到regex库:常用函数:

函数名称解释regex_match将一个字符序列与正则表达式进行匹配regex_search查找字符序列中与正则表达式匹配的结果,找到第一个之后就会返回结果并停止查找regex_replace替换字符到正则表达式匹配到字符序列的位置。

检验邮箱格式:

邮箱的一般格式:xxx@xxx.com,验证 xxx@163.com 格式的邮箱。

正则表达式:[[:graph:]]+@163[.]com,这里将.用方括号括起来是因为.在正在表达式中是一个通配符。

#include <iostream> #include <regex> using namespace std; int main() { string re = "[[:graph:]]+@163[.]com"; regex rule(re); string str = "acvds.cpp@163.com"; cout << regex_match(str, rule) << endl; //1 cout << regex_replace(str, rule,"ok") << endl; //ok return 0; } #include <regex> #include <iostream> using namespace std; int main() { string re = "E(?!xpression)[a-z]{0,}"; regex rule(re); string str = "Regular E E E"; cout << regex_replace(str, rule, "Expression") << endl; //Regular Expression Expression Expression system("pause"); return 0; } #include <iostream> #include <regex> using namespace std; int main() { string str = "Hello 2019, Bye 2018"; smatch result; regex pattern("\\d{4}"); //匹配四个数字 //迭代器声明 string::const_iterator iterStart = str.begin(); string::const_iterator iterEnd = str.end(); string temp; while (regex_search(iterStart, iterEnd, result, pattern)) { temp = result[0]; cout << temp << " "; iterStart = result[0].second; //更新搜索起始位置,搜索剩下的字符串 } cout << endl; return 0; }


1.本站遵循行业规范,任何转载的稿件都会明确标注作者和来源;2.本站的原创文章,会注明原创字样,如未注明都非原创,如有侵权请联系删除!;3.作者投稿可能会经我们编辑修改或补充;4.本站不提供任何储存功能只提供收集或者投稿人的网盘链接。

标签: #C #正则表达式 #单个字符