式里的替换替换指的替换是有几种规则,如果满足其中任意一种规则都应该当成匹配,具体方法是用把不同的规则分隔开。听不明白?没关系,看例子:0d2d80d3d7这个表达式能匹配两种以连字号分隔的电话号码:一种是三位区号,8位本地号如010,一种是4位区号,7位本地号0376。r
0d2d80d2d8这个表达式匹配3位区号的电话号码,其中区号可以用小括号括起来,也可以不用,区号与本地号间可以用连字号或空格间隔,也可以没有间隔。你可以试试用替换把这个表达式扩展成也支持4位区号的。d5d4d5这个表达式用于匹配美国的邮政编码。美国邮编的规则是5位数字,或者用连字号间隔的9位数字。之所以要给出这个例子是因为它能说明一个问题:使用替换时,顺序是很重要的。如果你把它改成d5d5d4的使用替换时,顺序是很重要的使用替换时话,那么就只会匹配5位的邮编以及9位邮编的前5位。原因是匹配替换时,将会从左到右地测试每个分枝条件,如果满足了某个分枝的话,就不会去管其它的替换条件了。Wi
dows98Wi
dows2000Wi
dosXP这个例子是为了告诉你替换不仅仅能用于两种规则,也能用于更多种规则。r
分组r
我们已经提到了怎么重复单个字符(直接在字符后面加上限定符就行了);但如果想要重复多个字符又该怎么办?你可以用小括号来指定子表达式子表达式也叫做分组分组,然子表达式分组后你就可以指定这个子表达式的重复次数了,你也可以对子表达式进行其它一些操作后面会有介绍。d133d13是一个简单的IP地址匹配表达式。要理解这个表达式,请按下列顺序分析它:d13匹配1到3位的数字,d133匹配三位数字加上一个英文句号这个整体也就是这个分组分组重复3次,最后再加上一个一到分组三位的数字d13。不幸的是,它也将匹配256300888999这种不可能存在的IP地址IP地址中每个数字都不能大于255。题外话,好像反恐24小时第三季的编剧不知道这一点,汗……。如果能使用算术比较的话,或许能简单地解决这个问题,但是正则表达式中并不提供关于数学的任何功能,所以只能使用冗长的分组,选择,字符类来描述一个正确的IP地址:204d250501dd3204d250501dd。理解这个表达式的关键是理解204d250501dd,这里我就不细说了,你自己应该能分析得出来它的意义。r
后向引用r
使用小括号指定一个子表达式后,匹配这个子表达式的文本也就是此分组捕获r