suliveevil Life is Short!

正则表达式

2020-04-04
suliveevil
IT

计算机软件领域真正称得上伟大的发明

正则表达式简单、优美、功能强大、妙用无穷,是可以与分组交换网络、Web、XML、哈希算法、编译技术、Unix、关系模型、面向对象、Lisp 并列的伟大发明。

正则表达式是几乎所有主流编程语言中的必备元素:Java、JavaScript、ECMAScript、Perl、Python、PHP、Ruby、Sed、AWK……

正则思想

通用模式表示法(general pattern notation)

正则功能

添加、删除、分离、叠加、插入、修改各种类型的文本和数据

正则内容

特殊字符

元字符

文字(literal)或普通文本字符(normal text characters)

普通字符对应普通语言中的单词,元字符对应语法。

正则表达式

字符组/集合 character classes

字符组元字符

- 连字符(from…to…)

排除型字符组/集合

[^] ^ 脱字符/插入符号/光标(caret),代表排除(negate)

通配符

. 点(dot/point)

多选结构

逻辑或(either/or)

忽略大小写

-i

单词分界符

\<\> 可以把它们想像成单词版本的 ^$

可选项元素

?

量词(quantifiers)

* 任意多次(包括零次)

✳️ 星号永远不会匹配失败

? 零次或一次

❓ 问号永远不会匹配失败

+ 一次或多次

正则优化

应用之前优化

传动装置优化

表达式本身优化

不要滥用括号()

不要滥用字符组[]

量词等价转换

a{3}比aaa快一些

拆分表达式

使用非捕获型括号

分支优化

少用贪婪模式

谨慎使用点号和星号

通配符和贪婪匹配会导致大量的回溯

在线测试工具

regex101.com

regexper.com

debuggex.com

参考资料

正则表达式 - 微软

《精通正则表达式(第三版)》

《正则表达式必知必会》


下一篇 iSH 使用

Comments

Content