相信很多人在处理数据验证时都会遇到这样的问题,“光要验证一个E-mail就要写上一整页的程序代码,而且还只有写的人看得懂 Orz”;相信更多会有这样的疑问,“为什么这个站点只要一行奇怪的code就可以验证E-mail了?”、“为什么他们验证E-mail的速度会这么快?”;一切都是因为这个东西,正规表示式(Regular Expression,简称RegEx或RE)。
关于RE的起源、演化你可以自行参阅维基百科的这则条目
目前有支持RE的程序语言非常的多,包括JavaScript、VBScript、JAVA、.NET、PHP、Perl、Phython、Ruby甚至C语言等等应有尽有,让程序员在字处理上(字符串搜索、比对、替换)都能够保持简洁、有效率的程序代码。
RE的范例仓库: http://regexlib.com/ ,这个站点汇集了世界各地网友所写出的RE范本,对于一些RE不够熟或者是没有时间自己编写RE的朋友能够提供相当大的帮助。不过,一般来说,RE的 pattern不会是通用的,也就是说其它人所写出的RE不见得自己就能够百分之百适用。因此,如果自己至少拥有能够看懂RE并且小幅修改的能力,这样一来在取用他人的心血与经验时,更能够调整出适合自己使用的RE。
除了将RE应用在程序上之外,进行字数据的整理也能够将RE的威力发挥到最大,透过RE进行处理以后再重新引出 标准格式的字数据,对于需要处理大量数据的专业人士帮助非常的大(例如生统的DNA数据);笔者前阵子利用Perl在处理html文件源代码,为了要将源代码中的URL找出并且替换成比较显眼的格式,在一开始用了大约20行的Perl code处理,效能上也不是那么好。后来灵机一动改用RE之后,仅仅使用了一行就解决了问题:
$line =~ s/(.*?)<\\/a>/$4 [$2]/gsi;
“=~” 右边是我的RE code,功用是将 URL NAME 替换为URL NAME[URL]
感受到威力了吗?心动了吗?快来试试吧!