前篇只记录了一些正则表达式,没有例子来说明。今天说个简单的例子。

squid中定义refresh_pattern,客户要求有http://www.a.com/b/0/到http://www.a.com/b/20/一共21个目录下的所有文件缓存一定时间。起先随意写了http://www.a.com/b/.*,结果在access.log里发现http://www.a.com/b/下,还有很多除了0-20以外的目录。这就没办法了,只能改。

如果一路写上二十一条refresh,实在麻烦。于是改琢磨正则匹配。

最后结果是http://www.a.com/b/(1{0,1}[0-9] 20)/.*
其中1{0,1}是一部分,{}规定之前的“1”占用0-1位;
[0-9]是第二部分,表示这一位上为0-9的任意一个数字;
两个合在一起,就是(0位)1[0-9]=0-9,(1位)1[0-9]=10-19,也就是0-19;
最后第三部分,单独的20;
全部就是0-20了。