C++正则表达式
表达式:
一般字符:可匹配目标序列中相同的字符通配符 . :可匹配目标序列中除了换行符外的任何字符[expr]形式表达式: 可以匹配目标序列中包含在表达式expr定义集内的字符或者排序规则表达式,采用 [^**expr],**可匹配目标序列中未包含在表达式expr定义集中的字符或排序规则。单个字符 : 如 [A] 匹配 A。
ch1 - ch2形式的字符域: 如 [A-F]匹配大写A到F中的任何一字母。
**[:name:]形式字符类: [[ :alpha:]]**匹配一个字母(不区分大小写)。
\、\f、\n、\r、\t 和 \v 分别表示匹配目标序列中的反斜杠、换页符、回车符、水平制表符和垂直制表符
DSW字符转义:
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。例如:[A-C]+ 可以匹配“AAA”, “C”
断言
例如:\bmail\b 匹配就是一个单词mail,This is a T(?!est):如果T后面没有est就匹配,主要用于替换, This is a T(?=est) 表示如果T 后面有est 就匹配,这主要用于替换
实例
在C++中正则表达式需要用到regex库:常用函数:
检验邮箱格式:
邮箱的一般格式: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.本站不提供任何储存功能只提供收集或者投稿人的网盘链接。 |