锐力易思▼ 2015▼ 正则 regex sed xargs 文本

016.科普.正则表达式及文本编辑

不等不靠,有囧有料。终日乾乾,或跃在渊。

正则表达式(RegExp),是攻城狮标配技能,
本期视频,让各位狮友40分钟从精通到入门 :)

@史荣久 / 2015-05-27 / CC-BY-SA-3.0

观看视频

内容摘要

■ 文本加工的例子(验证,提取,替换,分割):

  • 12个月(1[012]|[1-9]),千分位数\d{1,3}(,\d{3})*
  • CSV文件(标准格式)的域([^",]+|"(?:[^"]|"")+")
  • 只正则,根据SQL生成JavaBean,带注释和注解。
  • 不编码,统计spring-framework源码,达到以下目标:
  • 一共有多少个开发者(distinct @author)?
  • 每个开发者参与了多少行代码(粗略,有author就算)?

■ 正则表达式精要(基本上NFA各流派都适用):

  • 两大流派:PCRE(Perl兼容),Posix(BRE和ERE)。
  • 12+元字符^$?+*.\{[(|),2+特殊字符\^+[-]
  • 2种选择结构:字符串(X|Y|Z),字符[xyz]及否定[^xyz]
  • 字符串多选结构的否定式,需要用环视(零宽断言)(?!X|Y|Z)
  • 常用的字符组dwsb,\p{punct},块转义\Q\E(QuotE)。
  • 捕获组,反向引用,贪婪,非贪婪,量词,边界等。
  • .不能匹配换行符,小技巧[\s\S]*[\d\D]*
  • CRLF:[\r\n]+,\r?\n (记忆:return,n-r:a-d)。
  • java的String.replaceAll,split要注意转义。
  • java的replace时候,要注意替换字符串中的$
  • java的\1$1\k<name>${name}的用法。。
  • java的命名组,反向引用,超过9个引用时。

■ 文本加工的命令(Unix哲学,组合,精专):

  • 最牛的linux命令alias cd='rm -rf',玩笑加姿势。
  • 本期命令:grep,find,xargs,sed,uniq,wc
  • ag 超快的文本搜索命令,在700M代码用表达式不到3秒。
  • linux下,各种转义的规律(ERE,双引号,单引号)。
  • MS Window移植:CygwinGnuWin32unxutils

参考资源

■ 正则参考资料(括号内,为推荐程度):

■ 命令参考资料(应该记住,或者经常man):

■ 其他参考资料(Win32移植很犀利,RFC不是KFC):

欢迎围观

if (you.accept(MoilionCircle.SPIRIT)) {
    if(you.haveADL()){
        MoilionCircle we = you.search(MoilionCircle.SLOGAN);
        we.welcome(you);
    }
    if(you.share(this)){
        We.thank(you);
        We.mayFind7Moilion();
    }
}

我的收获

是时候显摆一下,每期视频,我的个人收获了。

速读了《精通正则表达式 (第3版)》和正则表达式经典实例》,
比较系统的了解了Regexp,原理和如何写出高性能的Regexp。
同时一直不太清楚的环视,贪婪,占有,也一并彻底吃透。

此外,更新了CSV标准定义,和bash转义中单双引号。
还有posfix的BRE和ERE的区别,之前老搞不清楚,主要靠试。

关于正则就说这么些吧。

《016.科普.正则表达式及文本编辑》 正则表达式(RegExp),是攻城狮标配技能,本期视频,让各位狮友40分钟从精通到入门 :)
题图:正则表达式,古老的智慧,多用作文本验证和加工。它看起来迷糊,学起来简单,用起来神奇。