回溯与正则表达式中的反向引用有何不同?
回溯如何在回溯中赢得限制,反之亦然?
问问题
163 次
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 回答