正则表达式

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

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

            //[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\n\r\t\v]相同"

            //"\S,所有单个非空字符,与 [^\f\n\r\t\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"放在匹配模式的字符前面,用于表示"\b"后面的字符必须位于首位。

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

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

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

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

 

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

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

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

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

 

posted @ 2013-06-25 18:29  hometown  阅读(132)  评论(0编辑  收藏  举报