正则表达式小结
Posted 放不下的小女孩
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了正则表达式小结相关的知识,希望对你有一定的参考价值。
学习完C++Primer第五版第十七章第三小节正则表达式后小结一下:
1、regex的匹配机制 不能直接确定输入序列中总共有多少表达式正确匹配给定的正则表达式。
注意:不要误认为match的成员函数size()返回的是匹配值的数量,匹配成功时size返回的是匹配的子表达式的数量+1(此处C++Primer上写的是子表达式的数量)
不论下式的mystring为何值,size()值恒为3或0;
std::string mystring ("subject"); std::smatch mymatches; std::regex myregex ("(sub)(.*)"); std::regex_match ( mystring, mymatches, myregex ); mymatches.size();
2、定位符^和$不能作为匹配的内容只能代表位置:
1 //匹配一个开头是字母或者一个数字后跟一个字母的表达式 2 (^|\\b)[a-zA-Z] //正确 3 [^\\b][a-zA-Z] //错误 4 //匹配一个结尾是字母或者一个数字后跟一个字母的表达式 5 [a-zA-Z]($|\\b] //正确 6 [a-zA-Z][$\\b] //错误
3. 匹配一个空格用方括号中间加一个空格表示[ ]
([ ]|^) //代表在开头或者前面是一个空格
4. 用整段或者整行(包含较多控制符如空格换行等)作为regex正则表达式的输入时,注意定位符^$代表的位置和控制符的匹配。
this code just for test
上式中开头定位符^在this之前,而for之前没有任何符号(个人猜测,未找到文献证明,如有不对请指出)。结尾定位符$在test之后。just后面有一个换行符\\n或\\r,即
^this code just\\n for test$
以上是关于正则表达式小结的主要内容,如果未能解决你的问题,请参考以下文章