Remember29的专栏

0\d\d-\d\d\d\d\d\d\d\d匹配这样的字符串: 以0开头,然后是两个数字,然后是一个连字号“-”,最后是8个数字 (也就是中国的电话号码。当然,这个例子只能匹配区号为3位的情形)。

这里的 \d是个新的元字符,匹配 一位数字(0,或1,或2,或……) 。-不是元字符,只匹配它本身——连字符(或者减号,或者中横线,或者随你怎么称呼它)。

为了避免那么多烦人的重复,我们也可以这样写这个表达式:0\d{2}-\d{8}。这里\d后面的{2}({8})的意思是前面\d必须连续重复匹配2次(8次) 。

正则表达式里还有更多的元字符,比如 \s匹配 任意的空白符,包括空格,制表符(Tab),换行符,中文全角空格等 。\w匹配 字母或数字或下划线或汉字等 。

\ba\w*\b匹配 以字母a开头的单词——先是某个单词开始处(\b),然后是字母a,然后是任意数量的字母或数字(\w*),最后是单词结束处(\b) 。\d+匹配 1个或更多连续的数字 。这里的 +是和 *类似的元字符,不同的是* 匹配 重复任意次(可能是0次) ,而+ 则匹配 重复1次或更多次 。\b\w{6}\b匹配刚好6个字符的单词。

元字符^(和数字6在同一个键位上的符号)和$都匹配一个位置,这和\b有点类似。^匹配你要用来查找的字符串的开头,$匹配结尾。这两个代码在验证输入的内容时非常有用,比如一个网站如果要求你填写的QQ号必须为5位到12位数字时,可以使

用: ^\d{5,12}$。

这里的{5,12}和前面介绍过的{2}是类似的,只不过{2}匹配 只能不多不少重复2次 ,{5,12}则是 重复的次数不能少于5次,不能多于12次 ,否则都不匹配。因为使用了^ 和$ ,所以输入的整个字符串都要用来和\d{5,12} 来匹配,也就是说整个输入 必须是5到12个数字 ,因此如果输入的QQ号能匹配这个正则表达式的话,那就符合要求了。

和忽略大小写的选项类似,有些正则表达式处理工具还有一个处理多行的选项。如果选中了这个选项,^和 $的意义就变成了 匹配行的开始处和结束处 。

如果你想查找元字符本身的话,比如你查找 . ,或者 * ,就出现了问题:你没办法指定它们,因为它们会被解释成别的意思。这时你就得使用\来取消这些字符的特殊意义。因此,你应该使用\.和 \*。当然,要查找 \ 本身,你也得用\\.

像[aeiou]就匹配 任何一个英文元音字母 ,[.?!]匹配 标点符号(.或?或!) 。

我们也可以轻松地指定一个字符范围 ,像 [0-9]代表的含意与\d就是完全一致的: 一位数字 ;同理[a-z0-9A-Z_]也完全等同于\w(如果只考虑英文的话)。

下面是一个更复杂的表达式:\(?0\d{2}[) -]?\d{8}。这个表达式可以匹配 几种格式的电话号码 ,像(010)88886666,或 022-22334455,或 02912345678等。我们对它进行一些分析吧:首先是一个转义字符 \(,它能出现0次或1次(? ),然后是一个0 ,后面跟着2个数字(\d{2} ),然后是) 或- 或空格 中的一个,它出现1次或不出现(? ),最后是8个数字(\d{8} )。

正则表达式里的分枝条件 指的是有几种规则,如果满足其中任意一种规则都应该当成匹配,具体方法是用|把不同的规则分隔开。

例子:

0\d{2}-\d{8}|0\d{3}-\d{7}这个表达式能 匹配两种以连字号分隔的电话号码:一种是三位区号,8位本地号(如010-12345678),一种是4位区号,7位本地号(0376-2233445) 。

\(?0\d{2}\)?[- ]?\d{8}|0\d{2}[- ]?\d{8}这个表达式 匹配3位区号的电话号码,其中区号可以用小括号括起来,也可以不用,区号与本地号间可以用连字号或空格间隔,也可以没有间隔 。你可以试试用分枝条件把这个表达式扩展成也支持4位区号的。

家!甜蜜的家!天下最美好的莫过於家

Remember29的专栏

相关文章:

你感兴趣的文章:

标签云: