之所以称之为正则表达式,是因为它们可以识别正则字符串(regular string),也就是说,它们可以这样定义:”如果你给我的字符串符合规则,我就返回它”,或者是“如果字符串不符合规则,我就忽略它”。这要求快速浏览大文档,以查找像电话号码和邮箱之类的字符串是非常方便的。
注意这里我用了一个词组正则字符串,什么是正则字符串?其实就是任意可以用一系列线性规则构成的字符串,就像:
(1)字母“a”至少出现一次;
(2)后面跟着字母“b”重复5次
(3)后面再跟着字母“c”重复任意偶数次
(4)最后一位是字母“d”,也可以没有
满足上述规则的字符串有“aaaaabbbbbccccd”,"aabbbbbcc"等(有无穷多的变化)
正则表达式就是这组规则的缩写。这组规则的正则表达式如下:
aa*bbbbb(cc)*(d | )
第一次见到这个字符串时会感觉难以理解,但是当我们将其分解之后就会很清楚了:
aa*
a后面跟着的a*(读作a星)表示“重复任意次a,包括0次”。这样就可以保证字母a至少出现一次。
bbbbb
这没有什么特别的,就是5次b
(cc)*
任意偶数个字符都可以编组,这个规则使用括号两个c,然后后面跟一个星号,表示有任意次两个c(也可以是0次)
(d | )
增加一个竖线&#