在开发过程中,最经常打交道的数据类型就属字符串了,我们经常要对字符串做各种各样的处理,其中最常做的就是字符串的比较,比较匹配的情况多种多样,非常麻烦,在开发过程中,我感觉到正则表达式为解决这个问题提供非常方便的处理方式。

正则表达式在网络上众说纷纭,我取一个感觉最为合理的解释:正则表达式是对字符串操作的一种逻辑公式,用事先定义好的特定字符、及这些特定字符的组合,组成一个“规则字符串”,这个“规则字符串”用来表达对字符串的一种过滤逻辑。

给定一个正则表达式和另一个字符串,我们可以达到如下的目的:1. 给定的字符串是否符合正则表达式的过滤逻辑(称作“匹配”);2. 可以通过正则表达式,从字符串中获取我们想要的特定部分,所以正则表达式在搜索字符串上拥有很强大的作用。

正则表达式的特点是:1. 灵活性、逻辑性和功能性非常的强;2. 可以迅速地用极简单的方式达到字符串的复杂控制。3. 对于刚接触的人来说,比较晦涩难懂。

正是正则表达式强大的功能特点,所以获得大量的计算机语言的支持:PHP、C#、Java、C++、VB、Javascript、Ruby以及python等。Java在jdk1.4中加入了java.util.regex包提供对正则表达式的支持。而且Java.lang.String类中的replaceAll和split函数也是调用的正则表达式来实现的。

由于正则表达式主要应用对象是文本,因此它在各种文本编辑器场合都有应用,小到著名编辑器EditPlus,大到Microsoft Word等大型编辑器,都可以使用正则表达式来处理文本内容。

正则表达式可以说是由一些普通字符和一些元字符(metacharacters)组成。普通字符包括大小写的字母和数字,而元字符则具有特殊的含义,可以说好的正则表达式没有不用上元字符的,但也因为元字符的灵活,让初学者感到有点晕头转向。

下面列出部分正则表达式的元字符和描述。

\ 转义字符。如,“n”匹配字符“n”。“\n”匹配一个换行符。

^ 匹配输入字符串的开始位置。^也匹配“n”或“r”之后的位置。

$ 匹配输入字符串的结束位置。$也匹配“n”或“r”之前的位置。

* 匹配前面的子表达式零次或多次。如,zo*能匹配“z”以及“zoo”。*等价于{0,}。

+ 匹配前面的子表达式一次或多次。+等价于{1,}。

? 匹配前面的子表达式零次或一次。如,“d(s)?”可以匹配“ds”或“ds”中的“d”。

{n,m} m和n均为非负整数,其中n<=m。最少匹配n次且最多匹配m次。

x|y 匹配x或y。例如,“z|food”能匹配“z”或“food”。

\d 匹配一个数字字符。等价于[0-9]。

\w 匹配包括下划线的任何单词字符。等价于“[A-Za-z0-9_]”。

\W 匹配任何非单词字符。等价于“[^A-Za-z0-9_]”。