计算机软件领域真正称得上伟大的发明
正则表达式简单、优美、功能强大、妙用无穷,是可以与分组交换网络、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