c++正则表达式

正则匹配实际上可以看做是一种属性匹配,一个字符串中,他的每个字符可以看做是一个实体,字符中间的缝隙也可以看做是实体,他们的属性包括内在属性和关联属性(该属性取决于字符的外部环境),每个属性标记代表的是一个属性集合,小的集合构成大的集合从而形成整体属性。

三个基本操作

1.regex_match判断目标字串是否匹配指定的正则表达式

2.regex_search在目标字串中寻找匹配指定正则式的字串

3.regex_replace 在目标字串中寻找匹配指定正则式的字串,之后用预设的字串替换这些匹配的字串

 每次匹配应该包含三个主要元素,1)目标字串 2)正则式 3)匹配结果

属性标记分两类:

1)字符属性标记

  • 内在属性表示字符本身的含义,例如d . v s cletter[class] [^class]
  • 关联属性,例如w(一个单词) 、重复次数* + ? {int,int} ,对于"aaa",我们可以用“a{3}”,这三个a本来都是独立的个体,但是他们放在一起就又具有了关联属性(就是重复三次),对第一个a而言,他的右边也是一个a,同时他右边这个a的右边也是一个a,因此第一个a可以匹配 a{3},同样第二三个a也匹配该属性。

2)位置属性标记

  • 他的内在属性很简单,就是一个位置
  • 一个位置根据所处的外部环境不同就形成了多样的关联属性 ^ $  ?= ?<,位置不会有重复次数这种关联属性

--------------------------------------------------------------------------------------------------------------------------

对于匹配结果有下面几个结果提取符号可用

$n 代指第n个分组的子串

$& 代指当前匹配到子串

$$ 代指符号本身

需要转义的字符

  1. $ ---> $  
  2. ( ---> (  
  3. ) ---> )  
  4. * ---> *  
  5. + ---> +  
  6. . ---> .  
  7. [ ---> [  
  8. ] ---> ]  
  9. ? ---> ?  
  10.  ---> \  
  11. / ---> /  
  12. ^ ---> ^  
  13. { ---> {  
  14. } ---> } 

还有一种平衡组的用法, 主要使用下面几个功能

(?'group'exp) 将exp压入堆栈

(?'-group'exp) 将exp弹出堆栈

(?(group)yes|no)检查堆栈中是否含有exp 然后继续匹配yes 或no分支

(?!)回顾断言,不能匹配任何东西,可以作为yes 或no条件

相信世界是平的
谨记四个字“修身养性”
大江东去浪淘尽英雄,再牛B的人物最后也是一掊土
向善不是目的,而是抚慰心灵,更多的感受幸福,感谢别人给你行善的机会
相信老子的话:万物生于有,有生于无,一切的道理都源于一个无法证明的假设
我是好是坏就自然而然的摆在那里,并不会因为别人的评价而改变什么,我也不需要别人用一张纸来说明我什么,世间最难得的是自由



支持大额赞助:
原文地址:https://www.cnblogs.com/sky-view/p/3917959.html