Regular expression
来自三线的随记
正则表达式是描述一组字符串特征的模式,用来匹配特定的字符串 -----Ken Thompson
正则表达式素以"坑多"而闻名,但是这跟你的学习方法有关。
正则表达式
引擎
正则引擎大体上可分为不同的两类:DFA和NFA,而NFA又基本上可以分为传统型NFA和POSIX NFA
DFA Deterministic finite automaton 确定型有穷自动机
NFA Non-deterministic finite automaton 非确定型有穷自动机
-------> Traditional NFA
-------> POSIX NFA
DFA引擎因为不需要回溯,所以匹配快速,但不支持捕获组,所以也就不支持反向引用和$number这种引用方式,目前使用DFA引擎的语言和工具主要有awk、egrep 和 lex。
POSIX NFA主要指符合POSIX标准的NFA引擎,它的特点主要是提供longest-leftmost匹配,也就是在找到最左侧最长匹配之前,它将继续回溯。同DFA一样,非贪婪模式或者说忽略优先量词对于POSIX NFA同样是没有意义的。
常见字符组简写式
例如: \d \D \S \s
正则表达式有什么写法?
- 字符串字面值 ------> 所谓字符串字面值,就是字面上看起来是什么就是什么
- 字符组简写式搭配一些莫名其妙的选项搭配字符串字面值
- ...
量词
{int x} 花括号中的数字表示待查找的数字出现的次数,包含数字的花括号是有一种量词(quantifier)。花括号本身用作元字符。
{int n, int m} 出现n - m次
我看过什么书?什么网站?
- 大wiki https://zh.wikipedia.org/wiki/%E6%AD%A3%E5%88%99%E8%A1%A8%E8%BE%BE%E5%BC%8F
- 人民邮电出版社 -- 《学习正则表达式》(这书不厚,方便装*)