好了,我们完成了点分十进制的简单描述,同时写了一个基本不可读的怪异的正则表达式。想象你正在维护一个程序时碰到了这个式子,你要花多长时间才能看懂它表达的意思?
可能这个式子还是不太对,因为有些解析器支持在每个十进制数前的前导零(例如,127.0.0.001和127.0.0.1是相通的,但另外一些解析器将前导零作为八进制的前缀,orz)。好,现在我们考虑前导零,上面的正则表达式变成:
^0*([1-9]?\d|1\d\d|2[0-4]\d|25[0-5])\.0*([1-9]?\d|1\d\d|2[0-4]\d|25[0-5])\.0*([1-9]?\d|1\d\d|2[0-4]\d|25[0-5])\.0*([1-9]?\d|1\d\d|2[0-4]\d|25[0-5])$
这就是我对正则表达式既爱又恨的原因。