【技术前沿】正则表达式:神奇的魔咒
作者:研发部 孙辉
简单介绍
高级编程语言之所以高级,是因为使用的语句和逻辑更符合人类的思维习惯,最近几年更是出现不需要懂英语就可以学习的易语言,哪怕是不懂编程的人也可以大概看出程序的功能,但是如果在程序中出现下面这行代码,相信很多人都会莫名其妙一头雾水:%s/foo(\([^,]*\),\([^,]*\),\([^)]*\))/foo($2,$1,$3)/g。
这行代码实现的功能是将方法foo(a,b,c)中的参数a,b互换,最后得到的方法是foo(b,a,c),这就是正则表达式的魅力。用简单的一行代码实现了普通代码10几行甚至几十行代码才能实现的功能。下面我们就来简单的认识一下这个神奇的魔咒。
一个正则表达式(regular expressions),就是用某种模式去匹配一类字符串的一个公式。在最简单的情况下,一个正则表达式看上去就是一个普通的查找串。例如,正则表达式"testing",它可以匹配"testing"和"123testing"等字符串,但是不能匹配"Testing"。正则表达式的功能很强大,很多地方都可以应用。比如很多时候都会用到密码,银行帐户的密码通常只能输入数字,如果有人故意输入字母或者其他字符会怎么样呢,就会被告知“请输入0-9的数字”。那么这个功能是怎么实现的呢。以C++为例,想要实现这个功能需要编写如下代码:
Char ch[16] = “your password”;
For(int i = 0; i < strlen(ch); i++)
{
If(ch[i] > 0x39 || ch[i] < 0x30)
{
MessageBox(“请输入0-9的数字”);
}
}
看起来也很简单,可如果用正则表达式来实现,就是这样一句话:[0-9]。
学习正则表达式
学习正则表达式通常分为三个层次:
第一个层次:学习基础。正则表达式由一些普通字符和一些元字符(metacharacters)组成。通字符包括大小写的字母和数字,而元字符则具有特殊的含义,重点就是要学习这些元字符,并能够灵活应用。元字符有点像我们所熟悉的通配符,在查询某个文件夹下所有txt的文件时,我们会在检索条件中输入*.txt,系统就能查出所有的txt文件,这里面的*便是一个通配符,代表一个或多个任意字符。正则表达式中的元字符种类更多样,应用更灵活。学习完基础就能够写出一些简单的正则表达式,比如:[A-Za-z0-9] 表示所有的大小写字母及所有数字。
第二个层次:能够写出一些完成特定功能的相对复杂的正则表达式。比如在文章开始列举的例子就是属于这一层次的正则表达式。想要看懂这些表达式,需要对元字符完全掌握,并知道如何把复杂的表达式进行拆分,一层层去解析表达式的意思。
第三个层次:到这个级别,那你已经可以整页整页写那些别人看不懂的天书了,这不是普通人能够达到的层次,这里暂不多做介绍。
VC对正则表达式的支持
早期的vc6.0版本并没有对正则表达式提供直接的支持,如果想使用,可以通过安装其他类库来实现,比如boost,功能较强,但据说在处理大数据量时性能差了一些,而且安装时比较麻烦。Greta,可以从微软的官方网站上下载到,直接包含头文件即可调用相关的方法。
希望这篇文章可以带给大家一些全新启示。