博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
正则表达式详解<一>
阅读量:7154 次
发布时间:2019-06-29

本文共 1760 字,大约阅读时间需要 5 分钟。

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

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|\\\\)

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

转载于:https://www.cnblogs.com/boost/p/10425492.html

你可能感兴趣的文章
CSS3 实现的一个简单的"动态主菜单" 示例[转]
查看>>
Hibernate使用详解(一)
查看>>
Angular Cli 创建并且运行项目
查看>>
《几何与代数导引》例2.7.2
查看>>
Synplify 使用过程中最常用的选项及命令的介绍
查看>>
创建带属性的XML文档
查看>>
JS实现跟随鼠标的魔法文字
查看>>
[转载]谈谈关于MVP模式中V-P交互问题
查看>>
linux下用eclipse开发mapreduce遇到的问题
查看>>
阻止微信浏览器下拉滑动效果(ios11.3 橡皮筋效果)
查看>>
小程序如何处理键盘覆盖输入框
查看>>
ajax
查看>>
java日历显示年份、月份
查看>>
KMP 算法
查看>>
TLD正确运行方法
查看>>
Rocket - util - GenericParameterizedBundle
查看>>
JDB调试代码 20165324 何春江
查看>>
DIV+CSS中清除浮动的7种方法分析
查看>>
xml是什么?
查看>>
史上最简单的Docker入门教程
查看>>