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次E E{,n} 至多匹配n次E E{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, "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; }
-
原文地址:https://blog.csdn.net/qq_41214679
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。