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

  2. 回溯如何在回溯中赢得限制,反之亦然?

4

1 回答 1

4

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

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

给定 input abca,贪婪匹配会将所有这些分配给[a-z]正则表达式的一部分,但是没有办法匹配 final a。回溯允许引擎通过将最终结果返回a到输入流并再次尝试进行备份,分配abc[a-z]部分和a部分a


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

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

可能是_在每行开头的两个连续小写字母之间插入的命令。\N反向引用(其中代表N一个数字)指回在().

于 2013-01-19T10:34:56.887 回答