`
trydofor
  • 浏览: 151359 次
  • 性别: Icon_minigender_1
  • 来自: 大连
社区版块
存档分类
最新评论

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 
0
0
分享到:
评论

相关推荐

    C#字符串和正则表达式参考手册.pdf

    正则表达式,或称regex,是定义搜索模式的一种专门语法,广泛应用于文本编辑器、数据库、数据处理及各种编程语言中进行模式匹配、检索和替换文本内容。正则表达式的概念最早是由Unix操作系统中的工具软件普及开来的...

    正则表达式学习手册

    首先,Henry Spencer以源代码的形式发布了一个C语言编写的正则表达式程序库,这极大地促进了正则表达式的普及。随后,Larry Wall发布了Perl语言的第一个版本,Perl成为了正则表达式的标志性语言之一。 - **1990年代...

    正则表达式的详细介绍

    正则表达式在信息技术领域广泛应用,包括操作系统、编程语言、文本编辑器和搜索引擎等多个方面。 正则表达式的起源可以追溯到20世纪40年代,源于神经生理学的研究,后由数学家Stephen Kleene在1956年正式引入并命名...

    Python 正则表达式入门(初级篇)

    在很多文本编辑器里,正则表达式通常被用来检索、替换那些匹配某个模式的文本。 许多程序设计语言都支持利用正则表达式进行字符串操作。例如,在Perl中就内建了一个功能强大的正则表达式引擎。正则表达式这个概念...

    python使用正则表达式替换匹配成功的组

    在很多文本编辑器里,正则表达式通常被用来检索、替换那些符合某个模式的文本。 许多程序设计语言都支持利用正则表达式进行字符串操作。例如,在Perl中就内建了一个功能强大的正则表达式引擎。正则表达式这个概念...

    iOS中使用正则表达式NSRegularExpression 来验证textfiled输入的内容

    在很多文本编辑器或其他工具里,正则表达式通常被用来检索和/或替换那些符合某个模式的文本内容。正则表达式这个概念最初是由Unix中的工具软件(例如sed和grep)普及开的。正则表达式通常缩写成“regex”,单数有...

    linux shell 正则表达式(BREs,EREs,PREs)差异比较

    在很多文本编辑器或其他工具里,正则表达式通常被用来检索和/或替换那些符合某个模式的文本内容。许多程序设计语言都支持利用正则表达式进行字符串操作。例如,在Perl中就内建了一个功能强大的正则表达式引擎。正则...

    DOS命令集 DOS命令集 DOS命令集

    - **功能**:在文件中查找指定的字符串或正则表达式。 - **语法**:`findstr [string] [filename]` ##### 31. FOR - 执行循环 - **功能**:对一组文件执行某个命令。 - **语法**:`for %variable in (set) do ...

Global site tag (gtag.js) - Google Analytics