c++正则表达式

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

三个基本操作

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

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

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

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

属性标记分两类:

1)字符属性标记

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

2)位置属性标记

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

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

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

$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条件

posted @ 2014-08-17 16:59  SKY_VIEW  阅读(4666)  评论(0编辑  收藏  举报