# 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
分享到:
相关推荐
正则表达式,或称regex,是定义搜索模式的一种专门语法,广泛应用于文本编辑器、数据库、数据处理及各种编程语言中进行模式匹配、检索和替换文本内容。正则表达式的概念最早是由Unix操作系统中的工具软件普及开来的...
首先,Henry Spencer以源代码的形式发布了一个C语言编写的正则表达式程序库,这极大地促进了正则表达式的普及。随后,Larry Wall发布了Perl语言的第一个版本,Perl成为了正则表达式的标志性语言之一。 - **1990年代...
正则表达式在信息技术领域广泛应用,包括操作系统、编程语言、文本编辑器和搜索引擎等多个方面。 正则表达式的起源可以追溯到20世纪40年代,源于神经生理学的研究,后由数学家Stephen Kleene在1956年正式引入并命名...
在很多文本编辑器里,正则表达式通常被用来检索、替换那些匹配某个模式的文本。 许多程序设计语言都支持利用正则表达式进行字符串操作。例如,在Perl中就内建了一个功能强大的正则表达式引擎。正则表达式这个概念...
在很多文本编辑器里,正则表达式通常被用来检索、替换那些符合某个模式的文本。 许多程序设计语言都支持利用正则表达式进行字符串操作。例如,在Perl中就内建了一个功能强大的正则表达式引擎。正则表达式这个概念...
在很多文本编辑器或其他工具里,正则表达式通常被用来检索和/或替换那些符合某个模式的文本内容。正则表达式这个概念最初是由Unix中的工具软件(例如sed和grep)普及开的。正则表达式通常缩写成“regex”,单数有...
在很多文本编辑器或其他工具里,正则表达式通常被用来检索和/或替换那些符合某个模式的文本内容。许多程序设计语言都支持利用正则表达式进行字符串操作。例如,在Perl中就内建了一个功能强大的正则表达式引擎。正则...
- **功能**:在文件中查找指定的字符串或正则表达式。 - **语法**:`findstr [string] [filename]` ##### 31. FOR - 执行循环 - **功能**:对一组文件执行某个命令。 - **语法**:`for %variable in (set) do ...