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