随笔-18  评论-11  文章-12  trackbacks-0

    在日常生活中,经常有大量的文本需要处理,正则表达式正是基于此提出的。本文将结合一些具体的实例来解释它。虽然在不同的语言环境中,正则表达式有不同的语法规则,但其基本语义却是一致的。http://en.wikipedia.org/wiki/Regular_expression。这将是一个系列教程。本节只是一个开胃菜:)

    某一次同学很无聊,然后问我电脑上有无小说。这是显然的,我是网络小说迷嘛!从起点down下无数小说存在电脑上,名字都懒得改,都是以数字打头,然后以“.txt”结尾,比如23432.txt之类的。当然,文件查找还是得用Everything,要不然电脑上的上百万个文件,手会抽筋的。

    (注:我以为Everything是史上最快的文件查找工具,强烈推荐!)

   先用"*.txt"尝试一下,:(,给出一大堆文本文件呀。范围太广。还是得用正则表达式来。

  ^[0-9]*\.txt

    Yes!给出了我电脑上存储的所有小说了。

image

    解释一下:
    ^[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 阅读(479) 评论(1)  编辑 收藏 引用

评论:
# re: 正则表达式(一) 2010-05-14 10:39 | shuminhua
您好!想向您请教一个关于正则表达式的问题。有一个文本文件,里面有部分内容为
......
interfaceimp
{
type patche;
......
在QT中,我想用正则表达式来匹配上面的三行内容,然后用下面的内容来代替她们,弄了好久都没弄出来!
interfaceimp
{
type ggi;
shandow interfacevol;
那么如何去匹配那三行内容?谢谢了!  回复  更多评论
  

只有注册用户登录后才能发表评论。
【推荐】超50万行VC++源码: 大型组态工控、电力仿真CAD与GIS源码库
网站导航: 博客园   IT新闻   BlogJava   知识库   博问   管理