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



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

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

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

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

## 观看视频

  * [优酷视频(被转720P)](http://v.youku.com/v_show/id_XOTY1MjUyMTcy.html)
  * [腾讯视频(被转720P)](http://v.qq.com/page/j/d/o/j0154851jdo.html)
  * [百度网盘(原始1080P)](http://pan.baidu.com/share/link?shareid=3935315343&uk=1380913564&fid=343945110651167)

## 内容摘要

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

  * 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移植:`Cygwin`,`GnuWin32`,`unxutils`

## 参考资源

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

  * [RegExp CheatSheet](http://www.cheatography.com/davechild/cheat-sheets/regular-expressions/)
  * [CSDN 雁过无痕博客(强力推荐)](http://blog.csdn.net/lxcnn)
  * [《精通正则表达式 (第3版)》(一般了解)](http://book.douban.com/subject/2154713)
  * [《正则表达式经典实例》(一般了解)](http://book.douban.com/subject/4872186)
  * [教学网站(例解语言差异)(随用随查)](http://www.regular-expressions.info)
  * [Sublime 3 Docs PCRE](http://docs.sublimetext.info/en/latest/search_and_replace/search_and_replace_overview.html#regular-expressions)
  * [Java 8 Pattern API](http://docs.oracle.com/javase/8/docs/api/java/util/regex/Pattern.html)
  * [java 命名分组的引用](http://stackoverflow.com/questions/415580/regex-named-groups-in-java)
  * [js RegExp资料 - w3school](http://www.w3school.com.cn/jsref/jsref_obj_regexp.asp)
  * [js RegExp资料 - mozilla](https://developer.mozilla.org/zh-CN/docs/Web/JavaScript/Reference/Global_Objects/RegExp)

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

  * [你见过的最牛逼的命令行程序是什么?](http://www.zhihu.com/question/29257300/answer/43814464)
  * [`sed -E` 扩展正则表达式](https://www.gnu.org/software/sed/manual/html_node/Extended-regexps.html)
  * [`sed` 基本正则表达式](https://www.gnu.org/software/sed/manual/html_node/Regular-Expressions.html)
  * [`bash` 单双引号与转义](http://stackoverflow.com/questions/4870253)
  * [`bash` 单双引号与转义(需科学上网)](http://wiki.bash-hackers.org/syntax/quoting)
  * [`ag` 很快的文本搜索](https://github.com/ggreer/the_silver_searcher)
  * [`awk`做sql的`sum`,`group`](http://www.unixcl.com/2008/09/sum-of-and-group-by-using-awk.html)

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

  * [Linux/Unix工具与正则表达式的POSIX规范](http://www.infoq.com/cn/news/2011/07/regular-expressions-6-POSIX)
  * [Unix命令的Window移植](http://www.cyberciti.biz/faq/unix-command-line-utilities-for-windows)
  * [RFC5322 邮件地址](http://tools.ietf.org/html/rfc5322#section-3.4)
  * [RFC4180 CSV格式定义](http://tools.ietf.org/html/rfc4180)

## 欢迎围观

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();
    }
}


----
题图:正则表达式,古老的智慧,多用作文本验证和加工。它看起来迷糊,学起来简单,用起来神奇。
原文: http://www.moilioncircle.com/release/016.know.regexp-grep-sed.html 

猜你喜欢

转载自trydofor.iteye.com/blog/2214744