正则表达式快速入门

                                 正则表达式快速入门

一  元字符 ^, $, ., \w, \s, \b, \d

1.后面四个有相应的大写,表反义。

^:匹配行开头,只有当其在“[ ]”中表示

2.\b :匹配单词的开始或结束,而“.”匹配除换行符外的任意字符。

eg: ^.$:匹配一个非空行;

\bstr : 匹配str开头的字符串

 

二  重复 * , + , ? , { }  

请叫上面四位为四大金刚”~

0个或多个;

:1个或多个;

?:0个或1个;

{}有三种写法,{n},{n,}和{n,m},不赘述了~

注意:?在四种情况下为懒惰匹配

分别是在*,?,+,{}后面

eg:a.*b,匹配aabab,而a.*b匹配aabab

 

三 “[]”表示字符类,就是里面只能选择其中的一个字符进行匹配

a[\w]c 可以匹配akc等;

A[\\w]c 可以匹配a\cawcakc

\\w”表示“\”和任意的单词(\w)

高级总结:

也就是说在“[]”内,“.” ,“*”,“?”和“{}”都表示本身,没有任何特殊的含义。因为“[]”里面是字符类啊!只能是一个个字符组成!像以上四种都不能惟一确定是一个字符(他们有的是0个或是多个),故在[]内表是本身,无特殊含义。然而,像\w,\d等,只能表示一个字符(如\d表示0~9中的任何一个数字),他们在[]中有着元字符本身的含义,而像前面所说的“四大金刚”都已蜕化成本身了~~ 

此外,“-”在“[]”中表示字符的范围,如[0-6]表示0~6的任意一个数字。

 

四 转义 

一言以蔽之:“四大金刚”,外加一些特殊含义的字符如:^,$,{,(,\,|等。

因为他们有着特殊的含义,但是如果我就是要匹配他们自身呢?这时就要用到“\”了!

如“\\”匹配字符“\

 

五  分支条件:“|

匹配左侧或是右侧,首先匹配左侧,只有当左侧不匹配时才匹配右侧。

很简单的吧,你应该理解了~~那不举例子了哈

 

六  分组 “( )

前面都是讲单个字符匹配(0次或多次),那么怎样才能匹配多个字符呢?

佛祖说:孩子,把这些多个字符用括号括起来吧~~

如:(\d{1,3}\.){3} 匹配“1~3个数字,并且重复3次”,31.23.432之类的

 

 

注意:这里再次说明“[]”与“( )”的区别,前者称为字符类,匹配其内的单个字符,侯泽华称为分组,匹配多个字符。前者只匹配[ ]中的一个!后者要匹配括号中的所有。因此,不能有[\d{3}(ab)?]之类的东西出现。

 

七 反向引用(后向引用)

用于重复搜索前面某个分组匹配的文本(该文本已被捕获,等待后面引用),组的序号或是名字标明,默认自动分配时按数字来标示,并且从1开始。

如:\b(\w+)\b\s+\1\b 可以匹配两个相同的单词的字符串,并且两个单词之间有一个或多个空格,如try      try

也可以自己指定组名(.NET Framework下支持)

格式:(?<组名>原有基础)或是(?’组名’原有基础)

对于自定义的组名要用 \k<组名>来引用。

\b(\w)(\d)\1\2\b: 默认命名,可以匹配h1h1,但不能匹配h1d2\1就是代表前面被(\w)捕获的内容!

\b(?<name>\w+)\b\s+\k<name>\b ,在.NET Framework下支持

 

八  零宽断言

用于查找在某些内容(但并不包括这些内容)之前或之后的东西,再读一遍上面的,我肯定你现在还没弄清楚,要不再读一遍。。。(别打我~

1. (?=exp): 零宽度正预测先行断言(死去吧,这么难记住,不记了!算了,记一下吧,以后装逼。。)它断言自身出现的位置的后面能匹配表达式exp,然后整个(?=exp)就是个条件!只有满足这个条件才能进行匹配。

如: I like singing and dancing.  \b\w+(?=ing\b)可以匹配singdanc。注意,如果写成 \b\w+(?=ing)\b则没有匹配项。

再来理解一遍:(?=ing\b)表示的是在这个表达式的位置处应该是以“ing”结尾的单词。注意的是,整个(?=exp)没有代表任何东西!你要找以“ing”结尾的单词的前半部分,就要用\w+来匹配!

2. (?<=exp)表示自身位置的前面呗~(啥,你说你想知道它的名字。。受不了,它叫。。零宽度正回顾后发断言。。很好记吧)

如:(?<=\bwa)\w+\b I’m watching TV! 匹配ching

 

八.5  负向零宽度断言

和零宽度断言相对应,如果表示“没有exp”,则进行其前面或后面内容的匹配。

1. (?!exp) 如 \d{3}(?!\d)  匹配3个数字(条件是这3个数字后面不能是数字)

2. (?<!exp) 如 \b((?!abc)\w+\b  匹配不包含连续字符串abc的单词。

 

高级总结:八和八.5如何总结呢?

 能  =          ‚    前面  <

ƒ 不能 !          ④    后面   无

另外这四种前面都是以?开头的哦!

考考你,匹配该位置前面不能有数字咋写?

首先:?

其次:“前面”: <

再次:“不能有”: !

因此:....(?<!\d)...

 

 

 

你可能感兴趣的:(编程,正则表达式)