在日常生活中,经常有大量的文本需要处理,正则表达式正是基于此提出的。本文将结合一些具体的实例来解释它。虽然在不同的语言环境中,正则表达式有不同的语法规则,但其基本语义却是一致的。http://en.wikipedia.org/wiki/Regular_expression。这将是一个系列教程。本节只是一个开胃菜:)
某一次同学很无聊,然后问我电脑上有无小说。这是显然的,我是网络小说迷嘛!从起点down下无数小说存在电脑上,名字都懒得改,都是以数字打头,然后以“.txt”结尾,比如23432.txt之类的。当然,文件查找还是得用Everything,要不然电脑上的上百万个文件,手会抽筋的。
(注:我以为Everything是史上最快的文件查找工具,强烈推荐!)
先用"*.txt"尝试一下,:(,给出一大堆文本文件呀。范围太广。还是得用正则表达式来。
^[0-9]*\.txt
Yes!给出了我电脑上存储的所有小说了。
解释一下:
^[0-9]表示文件名以0-9之间的数字开头,^是开头的意思($结尾)
*表示它前面的字符(这里是数字)要重复若干次(>=0)
\.匹配139869.txt中的那个小数点。因为正则表达式中,‘.’被占用了,表示任意字符,所以要转义一下
txt,这就不说了,紧接着小数点的是‘txt’三个字符。
Everything只支持部分正则表达式, | () ? * + . [] [^] ^ $ {m,n} 不过已经完全够用了。
http://xbeta.info/everything/faq.htm#How_do_I_use_regex
考虑这样一个问题:项目组在验收的时候,被指出代码的注释量不够,需要达到至少30%才行,也就是至少需要添加6500行注释。此时老师提出,要将所有的函数加上注释,函数的名称、功能、参数、返回值。这个时候,考虑能不能用正则表达式,提取源代码中的函数信息,然后自动生成注释模板?比如:
int foo(int x, int y);
替换为:
/**
* @method foo
* @para x
* @para y
* @return
*/
int foo(int x, int y);
注意到,这个函数参数的个数和类型可以是变动的,返回值限定符的个数和类型也是变动的,比如static类型函数,有两个限定符,而构造函数,则没有限定符,还有部分virtual类型函数。
posted on 2009-03-11 20:01
ronliu 阅读(627)
评论(1) 编辑 收藏 引用