正则学习备忘2—匹配一个或者多个字符

      在上面一节讲到正则学习中讲到的是关于当个字符的匹配,如果想匹配一个很长的字符串中的若干个或者很多个字符,如果都用上面的单个字符匹配模式那将需要书写很长的正则表达式,列入在web的颜色判断中就需要这么写#[0-9a-f][0-9a-f][0-9a-f][0-9a-f][0-9a-f][0-9a-f]。这明显是违反DRY原则。对于多个字符的匹配正则有提供其他的可以解决的办法。

      一.匹配一个或者多个:在正则中,可以在单个字符比如"x",字符组"[a-d]",特定类型比如"\d",单个任意字符"."后面添加"+"来匹配一个或者多个的字符串,即至少由一个字符组成的字符串。

          匹配0个1个或者多个:"*"

          匹配0个或者1个:"?"

      二.匹配固定数目的字符,正则表达式中,可以在 单个字符(比如“j”)、字符组(比如“[abcde]”)、特定字符类型(比如“\d”)、单个任意字符(即“.”) 后面加“{数字}” ,来表示匹配零个或多个字符组成的字符串。如a{6}表示aaaaaa,注意这时表示a出现六次,而不是表示a后面再出现6个a。"\d{3}"匹配000-999这1000个数。

      三.匹配区间以内数目的字符,上面讲到匹配固定数目的数,如果想匹配个数范围在某个区间内,就可以使用"{起始范围,结束范围}", "\d{1,3}"匹配0-999这个范围的数。这里还需要注意两个特列,"\d{0,1}",就是起始范围为0,结束为1时是相当于匹配0个或者1个"\d?"。如果是这样"\d{1,}"就相当于匹配一个或者多个"\d+".

      在上面讲的这两点中可以得知"{}"也是属于元字符,如果要将其作为特殊字符应该将其转义"\{","\}"

posted @ 2011-04-22 11:33  雁北飞  阅读(23950)  评论(0编辑  收藏  举报