1 正则表达式简介
“正则表达式是描述一组字符串特征的模式,用来匹配特定的字符串。”
-------图灵奖得主Ken Thompson
正则表达式最早出现于20世纪40年代,30年后真正出现在程序设计领域。如今,正则表达式成为sed,vim,grep,awk等类Linux操作系统衍生出得工具集重要的组成部分。正则表达式威力强大,一行正则表达式往往能实现很大篇幅的普通程序才能实现的功能。然而不幸的是,成为正则表达式的“黑带高手”并不是一件容易的事,通常要通过大量的实践才能达到。
2 学习工具
分别有线上和线下的学习正则表达式的工具。
2.1 Regexpal网站
通过访问http://www.regexpal.com/,可以看到如下图的页面,通过输入正则表达式和测试文本可以看到匹配结果,使用很方便。
在mac操作系统下可以下载Reggy软件,软件界面如下图,使用同样十分简单方便,并且不需要联网操作。
3 简单的模式匹配
3.1 匹配数字
\d和[0-9]都能用来单个匹配阿拉伯数字,如果只想匹配某几个数字,比如匹配4和6,可以使用[46]
3.2 匹配非数字
可以通过给上述表达式添加“^”的方式来匹配非数字,即[^\d],[^0-9],另外还有一种简答的方式即,\D
3.3 匹配单词字符和非单词字符
\w可用来匹配单词字符,即字母、数字、下划线,在英语环境中等效于[_a-zA-Z0-9]。和匹配非数字的原理一样,\W可以用来匹配空格、标点及其他非字母和非数字字符。
3.4 匹配空白字符和非空白字符
\s可用来匹配空格、制表符、回车符及换行符,即和字符组:[ \t\r\n]的效果一样。不难想象,\S可用来匹配非空白字符。
3.5 匹配任意字符和量词
点号可以匹配除行结束符以外的任意字符,当要匹配一定数目的任意字符时,例如要匹配4个字符,如果使用4个点号:....,会比较麻烦。这时可以使用量词的方法,即.{4}。同时,量词形如:{,4}、{4,6}、{4,}分别表示不多于4个,4-6个及不少于4个。