测试正则表达式
如果你不觉得正则表达式很难读写的
话,要么你是一个天才,要么,你不是地 球人。正则表达式的语法很令人头疼,即 使对经常使用它的人来说也是如此。由于 难于读写,容易出错,所以找一种工具对 正则表达式进行测试是很有必要的。
其它可用的测试工具:
• RegexBuddy
• Javascript正则表达式在线测试工具
不同的环境下正则表达式的一些细节是不相同的,本教程介绍的是微软 .Net Framework 2.0下正则表达式的行为,所以,我向你介绍一个.Net下的工具Regex Tester。首先你确保已经安装了.Net Framework 2.0,然后下载Regex Tester。这是个绿 色软件,下载完后打开压缩包,直接运行RegexTester.exe就可以了。
下面是Regex Tester运行时的截图:
元字符
现在你已经知道几个很有用的元字符了,如 \b , . , * ,还有 \d .正则表达式里还有 更多的元字符,比如 \s 匹配 任意的空白符,包括空格,制表符(Tab),换行符,中文 全角空格等 。 \w 匹配 字母或数字或下划线或汉字等 。
下面来看看更多的例子:
\ba\w*\b 匹配 以字母 a 开头的单 词——先是某个单词开始处( \b ),然 后是字母 a ,然后是任意数量的字母或 数字( \w* ),最后是单词结束处( \b ) 。
\d 匹配 1个或更多连续的数
字 。这里的 是和 * 类似的元字符, 不同的是 * 匹配 重复任意次(可能是0 次) ,而 则匹配 重复1次或更多
次 。
对中文/汉字的特殊处理是由.Net提供
的正则表达式引擎支持的,其它环境下的 具体情况请查看相关文档。
好吧,现在我们说说正则表达式里的 单词是什么意思吧:就是不少于一个的连 续的 \w 。不错,这与学习英文时要背的成 千上万个同名的东西的确关系不大 :)
\b\w{6}\b 匹配 刚好6个字符的单词 。 表1.常用的元字符
代码 说明
. 匹配除换行符以外的任意字符
\w 匹配字母或数字或下划线或汉字
\s 匹配任意的空白符
\d 匹配数字
\b 匹配单词的开始或结束
代码 说明
^ 匹配字符串的开始
$ 匹配字符串的结束
元字符 ^ (和数字6在同一个键 位上的符号)和 $ 都匹配一个位置, 这和 \b 有点类似。 ^ 匹配你要用来查 找的字符串的开头, $ 匹配结尾。这 两个代码在验证输入的内容时非常有 用,比如一个网站如果要求你填写的 QQ号必须为5位到12位数字时,可以 使用: ^\d{5,12}$ 。
这里的 {5,12} 和前面介绍过的
{2} 是类似的,只不过 {2} 匹配 只能
正则表达式引擎通常会提供一个“测试 指定的字符串是否匹配一个正则表达式”的 方法,如JavaScript里的RegExp.test()方法 或.NET里的Regex.IsMatch()方法。这里的 匹配是指是字符串里有没有符合表达式规 则的部分。如果不使用 ^ 和 $ 的话,对于 \d
{5,12} 而言,使用这样的方法就只能保证 字符串里 包含5到12连续位数字 ,而不是 整个字符串就是5到12位数字。
不多不少重复2次 , {5,12} 则是 重复的次数不能少于5次,不能多于12次 ,否则都不 匹配。
因为使用了 ^ 和 $ ,所以输入的整个字符串都要用来和 \d{5,12} 来匹配,也就是 说整个输入 必须是5到12个数字 ,因此如果输入的QQ号能匹配这个正则表达式的 话,那就符合要求了。
和忽略大小写的选项类似,有些正则表达式处理工具还有一个处理多行的选项。 如果选中了这个选项, ^ 和 $ 的意义就变成了 匹配行的开始处和结束处 。