Regular expression

来自三线的随记
Admin讨论 | 贡献2018年5月24日 (四) 11:40的版本 (创建页面,内容为“正则表达式是描述一组字符串特征的模式,用来匹配特定的字符串 -----Ken Thompson 正则表达式素以"坑多"而闻名,但是这跟你…”)
(差异) ←上一版本 | 最后版本 (差异) | 下一版本→ (差异)

正则表达式是描述一组字符串特征的模式,用来匹配特定的字符串 -----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

正则表达式有什么写法?

  1. 字符串字面值 ------> 所谓字符串字面值,就是字面上看起来是什么就是什么
  2. 字符组简写式搭配一些莫名其妙的选项搭配字符串字面值
  3. ...

量词

{int x}          花括号中的数字表示待查找的数字出现的次数,包含数字的花括号是有一种量词(quantifier)。花括号本身用作元字符。
{int n, int m}   出现n - m次

我看过什么书?什么网站?

  1. 大wiki https://zh.wikipedia.org/wiki/%E6%AD%A3%E5%88%99%E8%A1%A8%E8%BE%BE%E5%BC%8F
  2. 人民邮电出版社 -- 《学习正则表达式》(这书不厚,方便装*)