2017年3月21日星期二

Regular Expression 正则表达式

精通正则表达式:Mastering Regular Expressions

看中文版的好处一是速度快,而是把之前英文版草草翻过的部分重新仔细看一遍,效果比较好。

中文版总体感觉翻译的挺不错的,特别是后面5、6、7三章,整个行文比较清晰。

不过里面把非贪婪模式翻译成忽略优先、前后向匹配翻译成环视,每次都要顿一下才反应过来,极其别扭。

NFA 与 DFA

NFA vs DFA实现效能的掐架

Mastering Regular Expressions - 4.3. Regex-Directed Versus Text-Directed

NFA会根据各个子正则式依次进行匹配。

DFA则会同时匹配可能满足条件的子正则式,也就是说在匹配完成前会保存所有可能的中间态。

比如to(nite|knight|night)的匹配字符串tonight:

如果是NFA:先匹配nite,不行再回溯匹配knight,还不行再回溯匹配night,最后确认成功匹配。

如果是DFA:将同时匹配nite以及night的ni,发现只有night匹配nig,继续匹配完night,最后确认成功匹配。

没有评论:

发表评论