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

[img]http://www.moilioncircle.com/images/post/release/016.jpg[/img]

[b]# 016.科普.正则表达式及文本编辑[/b]

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

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

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

[b]## 观看视频[/b]

* [优酷视频(被转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)

[b]## 内容摘要[/b]

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

* 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`

[b]## 参考资源[/b]

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

* [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)

[b]## 欢迎围观[/b]


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


----
题图:正则表达式,古老的智慧,多用作文本验证和加工。它看起来迷糊,学起来简单,用起来神奇。
原文:[url]http://www.moilioncircle.com/release/016.know.regexp-grep-sed.html[/url]
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值