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

Posted thefist11

tags:

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

  1. ECMAScript正则表达式语言的一些特性

子表达式的索引从1开始。

在fmt中用$后跟子表达式的索引号来标识一个特定的子表达式

  • {d}表示单个数字而{d}{n}则表示一个n个数字的序列。(如,{d}{3}匹配三个数字的序列)

  • 在方括号中的字符集合表示匹配这些字符串中任意一个(如,[-. ]匹配一个短横线或一个点或一个空格)

  • 后接‘?’的组件是可选的( 如, \\ { d } { 3 } [-. ] ?\\ { d} { 4 } 匹配这样的序列: 开始是三个数字, 后接一个可选的短横线或点或空格, 然后是四个数字。 此模式可以匹配 555-0132 或 555.0132 或 555 0132 或 5550132。 )

  • 类似C++,在模式中每次出现的\\的地方需要转义因此需要使用\\

eg.

// 整个正则表达式包含七个子表达式: ( ddd ) 分隔符 ddd 分隔符 dddd
// 子表达式 1、 3、 4 和 6 是可选的; 2、 5 和 7 保存号码

string phone = "(\\\\()?(\\\\d{3})(\\\\))?([-.])?(\\\\d{3})([-.])?(\\\\d{4})"
  • "(\\()?表示区号部分可选的左括号

  • (\\d{3})表示区号

  • (\\))?表示区号部分可选的右括号

  • ([-.])?表示区号部分可选的分隔符

  • (\\d{3})表示号码的下三位

  • ([-.])?表示可选的分隔符

  • (\\d{4})表示号码的最后四位数字

string phone = "(\\\\()?(\\\\d{3})(\\\\))?([-. ])?(\\\\d{3})([-. ]?)(\\\\d{4})";
regex r(phone);
string s;
while (getline(cin, s)) {
    for (sregex_iterator it(s.begin(), s.end(), r), end_it; it != end_it; ++it) {
        if (valid(*it)) {    // valid为自定义函数,检查通过匹配后的号码是否合法
            cout << "valid: " << it->str() << endl;
        } else {
            cout << "not valid: " << it->str() << endl;
        }
    }
}

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

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操作