回溯与正则表达式中的反向引用有何不同


  1. 回溯与正则表达式中的反向引用有何不同

  2. 回溯引用如何赢得限制,反之亦然

回溯是状态机备份并重试正则表达式的其他匹配的一种方式。它几乎是正则表达式引擎的内部。

例如,假设您正在尝试匹配正则表达式[a-z]*a,任意数量的小写字符后跟a

给定输入abca,贪婪匹配会将所有这些分配给正则表达式的[a-z]部分,但无法匹配最终的a。回溯允许引擎通过将最终的a返回到输入流并重试来进行备份,将abc分配给[a-z]部分,并将a分配给a部分。


另一方面,反向引用是正则表达式引擎的用户引用以前捕获的组的一种方式。例如,

s/^([a-z])([a-z])/1_2/
  _____/_____/
     |      |
     |      +- capture group 2
     +-------- capture group 1

可以是在每行开头的两个连续小写字母之间插入CCD_ 11的命令。N反向引用(其中N表示数字(指代在()内捕获的组。

最新更新