分组
我们已经提到了怎么重复单个字符(直接在字符后面加上限定符就行了);但如 果想要重复多个字符又该怎么办?你可以用小括号来指定 子表达式 (也叫做 分组 ), 然后你就可以指定这个子表达式的重复次数了,你也可以对子表达式进行其它一些操 作(后面会有介绍)。
(\d{1,3}\.){3}\d{1,3} 是一个 简单的IP地址匹配 表达式。要理解这个表达式,请 按下列顺序分析它: \d{1,3} 匹配 1到3位的数字 , (\d{1,3}\.){3} 匹配 三位数字加上一 个英文句号(这个整体也就是这个 分组 )重复3次 ,最后再加上 一个一到三位的数字
( \d{1,3} )。
不幸的是,它也将匹配
256.300.888.999 这种不可能存在的IP 地址。如果能使用算术比较的话,或 许能简单地解决这个问题,但是正则
IP地址中每个数字都不能大于255,大
家千万不要被《24》第三季的编剧给忽悠 了……
表达式中并不提供关于数学的任何功能,所以只能使用冗长的分组,选择,字符类来 描述一个正确的IP地址: ((2[0-4]\d|25[0-5]|[01]?\d\d?)\.){3}(2[0-4]\d|25[0-5]|[01]?
\d\d?) 。
理解这个表达式的关键是理解 2[0-4]\d|25[0-5]|[01]?\d\d? ,这里我就不细说了, 你自己应该能分析得出来它的意义。