学习完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 justn
for test$

 

内容来源于网络如有侵权请私信删除

文章来源: 博客园

原文链接: https://www.cnblogs.com/wildricky/p/14762315.html

你还没有登录,请先登录注册
  • 还没有人评论,欢迎说说您的想法!