1. 正则表达式语言 ECMAscript
- 模式[ [::alpha: ] ] 匹配任意字母
- 符号+和*分别表示我们希望“ 一个或多个” 或“ 零个或多个” 匹配。
2. 指定 regex 对象的选项
当我们定义一个 regex 或是对一个 regex 调用 assign 为其赋予新值时, 可以指定一些标志来影响 regex 如何操作。 这些标志控制 regex 对象的处理过程。
当定义一个regex或是对一个regex调用assign为其赋予新值时,可以指定其标志。
2.1 regex(和wregex)选项
-
最后 6 个标志指出编写正则表达式所用的语言。 对这 6 个标志, 我们必须设置其中之一,且只能设置一个。
-
默认情况下, ECMAscript 标志被设置, 从而 regex 会使用 ECMA-262规范, 这也是很多 Web 浏览器所使用的正则表达式语言。
| 操作 | 描述 |
|---|---|
| regex r(re) | re表示一个正则表达式,可以是一个string、一个表示字符范围的迭代器对 |
| regex r(re, f) | 一个指向空字符结尾的字符数组的指针等。f是指出对象如何处理的标志。 |
| r1 = re | 将r1中的正则表达式替换为re,re表示一个正则表达式,可以是另一个regex对象、一个string、一个指向空字符结尾的字符数组的指针或是一个花括号包围的字符列表 |
| r1.assign(re,f) | 与使用赋值运算符(=)效果相同;可选的标志f也与regex的构造函数中对应的参数含义相同 |
| r.mark_count() | r中子表达式的数目 |
| r.flags() | 返回r的标志集 |
2.2 定义regex时指定的标志
定义在regex和regex_constants::syntax_option_type中
| 标志符 | 说明 |
|---|---|
| icase | 在匹配过程中忽略大小写 |
| nosubs | 不保存匹配的子表达式 |
| optimize | 执行速度优先于构造速度 |
| ECMAscript | 使用ECMA-262指定的语法 |
| basic | 使用POSIX基本的正则表达式 |
| extended | 使用POSIX扩展的正则表达式 |
| awk | 使用POSIX版本的awk语言的语法 |
| grep | 使用POSIX版本的grep语言的语法 |
| egrep | 使用POSIX版本的egrep语言的语法 |
使用icase标志来查找具有特定扩展名的文件名,其示例如下:
//正则表达式[^c]表明我们希望匹配任意不是c的字符,而[^c]ei指出希望匹配这种字符后接ei的字符串。
//一个或多个字母或数字字符后接一个'.'再接"cpp"或"cxx"或"cc"
regex r("[[:alnum:]] + \.(cpp|cxx|cc)$", regex::icase);
smatch results;
string filename;
while (cin >> filename)
if (regex_search(filename, results, r))
cout << results.str() << endl; //打印匹配结果



