正则表达式是一种处理字符串的微型语言;有以下的基本术语:

l  模式(pattern):正则表达式实际上是通过字符串表达的一个模式

l  匹配(match): 判断正则表达式和给出的序列[first , last),是否全部匹配

l  搜索(search):判断在给定的序列里是否存在和正则表达式匹配的子字符串

l  替换(replace):将匹配到的子字符串替换成其他的字符串

在C++里边默认的语法是ECMAScript,这是最强大的正则表达式的语法;

1.  ECMAScript语法

1.   锚点(anchor)

特殊字符^和$是锚点,分别匹配到字符串的开头和结尾。例如:^text$,表达的意思就是只匹配text字符串

2.通配符(wildcard)

可以用来匹配除了换行符以外的任何字符,例如:正则表达式是:a.b,可以匹配到abc,adb,

但是不可是:acdb

3.替换

A|B 可以匹配到A或则是B

4.分组(捕获组)

例如:(.)(ab|cd)(.)其中有三个标记的子表达式,例如输入1ab5则可以捕获到,1 。 ab。5这仨个捕获组。

5.重复

* 表示匹配零次或则多次之前的部分。例如:a*b 可以匹配到b , ab , aab , aaab

+ 表示匹配一次以及一次以上之前的部分,例如:a+b可以匹配到ab , aab但是不能是b

? 表示匹配到零次或是一次以前的部分,例如: a ? b 可以匹配到ab , b 但是不能位 aab

{…}表示区间重复,a{n}表示匹配到的a刚好位n个,a{n,}表示匹配到的a为n位或则n位以上;a{n,m}表示匹配到的a的个数位>=n和<=m个;

6.贪婪匹配和非贪婪匹配

输入字符串位: aaabbb

贪婪匹配:正则表达式:(a+)(ab)*(b+) ,匹配到:”aaa””””bbb”

非贪婪匹配:正则表达式:(a+?)(ab)*(b+)匹配到:“aa“”ab””bb”;

7.优先级

第一:元素本身

第二:量词:+,* , ? {…}

第三:串联:例如ab+c在量词之后绑定

第四:替代符| ,最后绑定

例如:正则表达式:ab+c|d,会匹配到abc, abbc , d , 如果添加括号,ab+(c|d)则匹配到

, abc , abbc , abd abbd

8,字符集合匹配

[a-z]表示可以匹配到a到z之间的任意一个字符,(注意是任意一个,而不是多个)

[a-zA-Z]表示可以匹配到a到z以及A到Z之间对的任意一个字符;

另一种方法是使用某种字符类,表示方法[:name:]例如:

[[:digit:]]表示可以匹配到0~9之间的任意一个数字;

这里的name可以是以下:

Name

Expression

digit

数字

d

和digit一样

xdigit

数字和表示16进制的abcdef或则ABCDEF

alpha

字母字符所有的大小写

alnum

Alpha和digit的组合

w

和alnum一样

lower

小写字母

upper

大写字母

blank

一行文本中分割单词的空格符

punct

标点符号字符,包括不是alnum意外的所有图形字符

应用:

问题:表示0~9的任意一个以及多个数字的匹配

解答:(1)[0-9]+

(2)  [[:digit:]]+

(3)  [[:d:]]+

(4)  \d+

问题:匹配除了小写字母以外的任意字符

解答:(1) [[:upper:]]

(2) [^[:lower:]]

9.后向引用

\n  n是>0的整数,表示第n个捕捉组,例如:

正则表达式:([:d:]*)-.*-\1

可以匹配到:123-abc-123 , 789-kdf-789 , 9-m-9

但是不可是:123-abc-1234,必须是123,和第一个捕获组一样的内容;

10.C++里的转义

转移\d,在C++里应该将其转移,因为\是特殊字符在C++里,所以需要转移,转义位:

\\d.

转移\,这个更加麻烦。应该转译为:\\\\

例如:
     正则表达式:( |\\n|\\r|\\\\)

搜索空格
, 换行符 , 回车符 , 反斜杠;

最新文章

  1. windows对象模型分类
  2. js JS 浮点计算BUG
  3. Visual Studio C#的winform/webform/asp.net控件命名规范
  4. js移动焦点到最后
  5. js获取时间天数
  6. iOS--导航栏样式
  7. MVC中配置OutputCache的VaryByParam参数无效的问题
  8. 剖析magento中关于Email模板的设置
  9. System.out.println()的解释
  10. Daily Scrum 12.20
  11. Day 17 常用模块
  12. Hibernate查询以及优化策略04
  13. vue里在自定义的组件上定义的事件
  14. 图-&gt;最短路径-&gt;多源最短路径(弗洛伊德算法Floyd)
  15. BZOJ2178: 圆的面积并(格林公式)
  16. 数据结构(三)串---KMP模式匹配算法
  17. msql修改密码
  18. contentType和dataType
  19. Redis能做什么?不能做什么?
  20. LeetCode之Weekly Contest 102

热门文章

  1. Hibernate(二)持久化对象的状态
  2. Python rest-framework 中类的继承关系(as_view)
  3. vue.js 项目打包
  4. Yii 日期时间过滤列 filter
  5. Checkpoint not complete
  6. Difference between &#39;SAME&#39; and &#39;VALID&#39; padding
  7. Kubernetes核心概念简介
  8. Android Fragment功能的例子
  9. Android如何使用WebView访问https的网站
  10. spring shiro 集成