C++ Primer 5th笔记(chap 17 标准库特殊设施)正则表达式

Posted thefist11

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了C++ Primer 5th笔记(chap 17 标准库特殊设施)正则表达式相关的知识,希望对你有一定的参考价值。

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时指定的标志

定义在regexregex_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;    //打印匹配结果

以上是关于C++ Primer 5th笔记(chap 17 标准库特殊设施)正则表达式的主要内容,如果未能解决你的问题,请参考以下文章

C++ Primer 5th笔记(chap 17 标准库特殊设施)输出补白

C++ Primer 5th笔记(chap 17 标准库特殊设施)bitset类型

C++ Primer 5th笔记(chap 17 标准库特殊设施)正则表达式

C++ Primer 5th笔记(chap 17 标准库特殊设施)tuple 返回多个值

C++ Primer 5th笔记(chap 17 标准库特殊设施)控制输入格式

C++ Primer 5th笔记(chap 17 标准库特殊设施)bitset操作