//-----匹配单字符形式------------
//"."匹配任意单个字符,包括其本身,可以连续使用
//[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