Skip to content

正则表达式的应用原理

在掌握了正则表达式应用的基础知识和了解了回溯的细节后,现在来全面学习正则表达式应用到目标字符串的过程:

1. 正则表达式编译

检查正则表达式的语法正确性,如果正确,将其编译为内部形式;

2. 传动开始

正则引擎将正则引擎“定位”到目标字符串的起始位置;

3. 元素检测

正则引擎开始测试正则表达式和文本,依次测试表达式的各个元素;
进行回溯时,还有几点需要注意:

  • 相连元素:比如AchooLuv中的A``c``h``o``o等等,会依次尝试,只有当某个元素匹配失败时才会停止;
  • 量词修饰的元素:控制权将在量词和被限定的元素之间轮换;
  • 控制权在捕获型括号内外切换时会带来一些开销:因为一对括号可能属于某个回溯分支,括号的状态就是用于回溯状态的一部分,所以进入和退出捕获型括号时需要修改状态。

4. 寻找匹配结果

若匹配到一个结果,传统型 NFA 会“锁定”当前状态,报告匹配成功;

5. 传动装置的驱动过程

若未找到匹配,传动装置就会驱动引擎,从文本的下一个字符开始新一轮的尝试(即回到第 3 步);

6. 匹配彻底失败

如果从目标字符串的每个字符开始尝试都失败了,就会报告匹配彻底失败。

打造高效正则就是要减少这些处理,以及如何适当的应用这些技巧,接下来将讲解这些技巧和注意事项!