文档章节

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

攻城狮朋友圈
 攻城狮朋友圈
发布于 2015/06/13 14:11
字数 908
阅读 16
收藏 0

原文:http://www.moilioncircle.com/release/016.know.regexp-grep-sed.html

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的区别,之前老搞不清楚,主要靠试。

关于正则就说这么些吧。

© 著作权归作者所有

共有 人打赏支持
攻城狮朋友圈

攻城狮朋友圈

粉丝 5
博文 14
码字总数 2885
作品 1
大连
程序员
linux下grep、awk和sed工具用法概览

linux下grep、awk和sed工具用法概览 在linux下,grep、awk和sed是非常强大的文本处理工具,其中grep命令主要用作文本搜索,而awk和sed命令侧重于文本的编辑等操作,另外awk本身还可以是编程语...

小陶小陶
09/11
0
0
2017-12-9Linux基础知识(16)文本处理工具

我们简述一下上一章的内容,主要讲的是bash编程的基础,介绍了其编程类型,以及介绍了编程语言的类型什么是过程式编程和对象式编程,然后我们编写了第一个脚本程序以及如何运行的方式有那些,...

刘祥宇
2017/12/11
0
0
JMeter正则表达式

正则表达式被用来检索、替换那些符合某个模式(规则)的文本。JMeter正则表达式或模式运用于JMeter测试计划中。 当我们创建测试计划时,使用正则表达式可以节省大量的时间并获得更大的灵活性。...

地空神一
2017/12/23
0
0
TextKit(图片混排)

一、TextKit 探究 1.1 TextKit的概述 在iOS7中,苹果引入了Text Kit——Text Kit是一个快速而又现代化的文字排版和渲染引擎。Text Kit在UIKit framework中的定义了一些类和相关协议,它最主要...

从訫开始_倾深爱
2016/09/23
36
0
Notepad++删除空行的多种实现办法

Notepad++支持基础的正则表达式,同时由于自身丰富的插件和功能,所以删除空行或有空格的空行,有多种实现办法,条条大路通罗马,闪电博客抛砖引玉,供大家参考。 一、删除空行(不包括有空格...

未来星狒狒
2015/11/12
0
0

没有更多内容

加载失败,请刷新页面

加载更多

Bash脚本输入参数的使用

Bash脚本输入参数的使用 Bash脚本传入的参数,在脚本中以位置的形式进行访问,即 $n 。例如,$1 为执行脚本的第一个参数,$2 为执行脚本的第二个参数。另外Bash中还提供了一些其它的便捷操作...

小陶小陶
2分钟前
0
0
多线程场景下,触发OOM的线程是否会影响其他线程的工作

public static void main(String[] args) { Thread t1 = new Thread(new Runnable() { @Override public void run() { int i = 0;......

麦馍
6分钟前
0
0
模拟Dubbo的zookeeper一致性Hash发现

接之前一篇<手写zookeeper来模拟dubbo的注册/发现>,使用一致性Hash来进行查找需要寻找的服务. Hash处理接口 public interface HashFunc { public Long hash(Object key);} 一致性Has...

算法之名
18分钟前
9
0
#mysql50# not Exist

data 目录有中文名称,可能是复制的"复件...."

少年不搬砖老大徒伤悲
31分钟前
1
0
在yii2中,让你action参数支持POST数据的小方法

我们先来看一段代码 class RaController extends Controller { public $enableCsrfValidation = false; public function actionSay($username = '',$city = ''){ echo "{$......

阿北2017
40分钟前
3
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部