正则表达式

 //-----匹配单字符形式------------

            //"."匹配任意单个字符,包括其本身,可以连续使用

            //[dt]中括号为特殊标记,匹配中括号内的任意一个。可以区间方式填写[0-9][0-9a-z].

            //[^abc]反义字符组,匹配中括号外的任意一个字符![^A-Z]

            //当匹配元字符(如:.[])等,需要转义

            //匹配数字类型d,所有单个数字,与[0-9]相同

            //所有非数字,D,与[^0-9]相同

            //w,所有单个大小写字母、数字、下划线,与 [a-zA-Z0-9_]相同

            //W,所有单个非大小写字母、非数字、非下划线,与 [^a-zA-Z0-9_]相同

            //"s,所有单个空字符,与 [f v]相同"

            //"S,所有单个非空字符,与 [^f v]相同"

 

            //------匹配多个字符------------

            //匹配一个或多个用+,w+[as]+

            //匹配0个或多个用*,d*[a-z]*

            //匹配0个或1个用, aa

            //匹配指定书目用{数字},audiA{8}

            //匹配区间以内数目的字符{最小个数,最大个数},{0,1}相当于"?"

 

            //--------贪婪匹配与惰性匹配(后面加?)------------

            //"<a>ru</a>rueoig124t<a>324tgrfh</a>" (regex:<a>.*</a>  <a>.*?</a>)

            //贪婪匹配:<a>ru</a>rueoig124t<a>324tgrfh</a>

            //惰性匹配:<a>ru</a>和<a>324tgrfh</a>

贪婪匹配

惰性匹配

匹配描述

?

??

匹配0个或1个

+

+?

匹配1个或多个

*

*?

匹配0个或多个

{n}

{n}?

匹配n个

{n,m}

{n,m}?

匹配n个或m个内

{n,}

{n,}?

匹配n个或多个

 

//--------匹配边界-------------------

            //""放在匹配模式的字符前面,用于表示""后面的字符必须位于首位。

            //""放在匹配模式的字符后面,用于表示""前面的字符必须位于末位。

            //"B"用于匹配非边界的情况,用法与""相同。

            //通常情况下,以 空格、段落首行、段落末尾、逗号、句号 等符号作为边界,值得注意的是,分隔符-也可以作为边界。

            //匹配文本的边界:在匹配模式前面加^,以匹配其位于整个文档的开头;在匹配模式的最后一个字符后加$,说明是文档的结尾。

 

 //--------匹配子模式----------------
            //在正则表达式中,可以使用“(”和“)”将模式中的子字符串括起来,以形成一个子模式。将子模式视为一个整体时,那么它就相当于单个字符
            //可以使用“|”将一个表达式拆分成两部分“reg1|reg2”,它的意思是:匹配所有符合表达式reg1的文本 或者 符合表达式reg2的文本

            //-----------后向引用-------------------
            //正则表达式中,使用“数字”来进行后向引用,数字表示这里引用的是前面的第几个子模式,即第几个"()"
            //例如<h([1-6])>.*?</h1> ,此处的1用于匹配([1-6]), flag 1:
            //<h([1-6])>.*(.?)<(/h)3>,此处的3用于匹配(/h).
            //在.net中的后项引用实现,如下:
            //在 .Net 中使用正则表达式进行查找时,给子模式命名的语法是:?<name>,后向引用的语法是:k<name>。
            //例如<h(?<num>[1-6])>.*(.?)</hk<num>> 与flag 1处的正则结果相同。

            //---------文本替换----------------
            //在查找中,使用后向引用来代表一个子模式,其语法是“数字”;而在替换中,其语法是“$数字”
            //"$数字",即替换第几个“()”中的文本。
            //例如:Regex:((d{4}))    Replace:$1-    Text: (0398)5894986   和(0371)2563484
            //结果: 0398-5894986 和0371-2563484
            //在 .Net 中使用正则表达式进行替换时,给子模式命名的语法是:?<name>,后向引用替换的语法是:${name}。

            //-----------预查和非获取匹配----------
            //为了使用后向引用,我们需要“()”将字符括起来形成一个子模式。系统在幕后会将所有的子模式保存起来。
            //正则表达式中,可以在子模式内部前面加“?:”来表示这个子模式是一个 非获取匹配,非获取匹配不会被保存,不能在后向引用中获取
            //例如:Regex:windows ([w.]+)   Replace:win$1       Text:windows 2003    结果:win2003     //后向引用
            //  Regex:windows (?:[w.]+)     Replace:win$1       Text:windows 2003    结果:win$1       //非获取匹配
            //正向预查。//
            //在子模式内部前面加“?=”,表示要匹配的文本必须满足子模式前面的文本,不包含子模式。
            //例如:Regex:windows (?=[w.]+)       Text:windows 2003          结果:windows
            //反向预查。//
            //反向预查在子模式内部前面加“?<=”,要匹配的文本必须满足此子模式 后面 的表达式;子模式不参与匹配。
            //例如:Regex:(?<=CNY:)d+.?d+      TEXT:CNY:102.36 和CNY:4566   结果:102.36 和4566
            //正向、反向预查组合。//
            //Regex:(?<=(<h(?<num>[1-6])>)).*?(?=(</h(k<num>)>))  可以获得<html> 中间的内容!
            //负正向预查,负反向预查。
            //在正则表达式中,可以在子模式内部前面加 “?!” 来形成一个 负正向预查,它的效果与 “?=” 相反
            //Regex:windows (?![d.]+)  可以得到windows xp中的“windows” ,windows 2003 则什么也匹配不出来
            //在正则表达式中,可以在子模式内部前面加 “?<!” 来形成一个 负反向预查,它的效果与“?<=” 相反
            //Regex:(?<!CNY:)d+.?d+   Text:CNY:789.9 US:789.90   结果:789.90

 

原文地址:https://www.cnblogs.com/hometown/p/3204231.html