一、作用
pattern 是一个c++字符串,它作用是给出一匹配规则,去检测给定字符串是否具备这种拼接规则。
二、模式字符串的语法规则
需要插入一句题外话,在特殊元字符中会用到\,对于c/c++而言它是个特殊字符,若我们需要一个“斜杠"时候需要
在其前面加一个\,即应该写为\\。
1>开始与结尾位置声明
1.1 ^表示字符串的开始
如 "^yao",表示以“yao”开始的的字符串。
“yaopanyuan”,“yaois”是符合模式的字符串。
1.2^$表示字符串的结尾
“yao$”表示以“yao”结尾的字符串
“panyuanyao”我的名字英文写法,匹配成功。
2>字母,数字等的表示方法
2.1> . 表示除换行以外的任意字符
2.2> \w 表示任意字母、数字、下划线
如下边例子: [line 1] 表示a后边可以是任意字母、数字、下划线的字符串,[line2] 被测试字符串a后边不是
字母、数字、下划线中一种,因此匹配失败。
void metachar() {
std::string strPattern("a\\w"); // [line 1]std::string str_test = "a*******"; // [line 2]
if (std::regex_search(str_test, result, r)) {
std::cout << result.str() << std::endl;std::cout << "smatch failed !" << std::endl;
}
}
2.3> \s:表示任意空白符(tab 包含在内)
2.4> \d :表示单个数字
2.5> [[:alpha:]]:表示任何字母
2.6> [[:alnum:]] : 表示任何字母和数字
3>次数限制
3.1> {n} : "ab{9}",匹配某字符串中符合a后边9个b的子字符串
3.2> {n,}: "ak{8,}",匹配某字符串中符合a后边至少8个k的子字符串
3.3> {n,m}: "ak{6, 9}", ……a后k次数为6~9 【注】不要在{}中出现空格否则会使程序崩溃4>集合及补集
4.1> []: 使用{}表示重复次数(下边介绍),[]用于表示一个字符集合。可以使用-来表示一个范围([0-9]表示0~9十个数构 成的一个集合)
4.2> 补集: []中使用^来表示集合的补集如[^7-9]表示除7.8.9以外数字(0 1 2 3 4 5 6)。
5>分组 ()
作用就是组织一个单元,以便可以循环,或选择(如:(cpp|cc))。使用()来进行分组,()中|表示或
6>懒惰匹配
【1】*? 表示:重复任意此,但尽可能少
【2】+? 重复一次或更多次,但尽可能少
【3】?? 重复0次或1次,但尽可能少
【4】{n,}? 重复一次或更多次,但尽可能少
【5】{n,m}? 重复n到m次,但尽可能少
三、结束语
到此正则表达式模式已经叙述完了,以后的篇章将以代码形式介绍c++11正则表达式库。