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

时间:2013-01-19 10:21:10

标签: ruby regex

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

  2. 反向引用获胜限制与回溯有何关系,反之亦然?

1 个答案:

答案 0 :(得分:4)

回溯是状态机备份和重试正则表达式的其他匹配的一种方式。这对于正则表达式引擎来说几乎是内部

例如,假设您要匹配正则表达式[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

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