-
回溯与正则表达式中的反向引用有何不同
-
回溯引用如何赢得限制,反之亦然
回溯是状态机备份并重试正则表达式的其他匹配的一种方式。它几乎是正则表达式引擎的内部。
例如,假设您正在尝试匹配正则表达式[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
表示数字(指代在()
内捕获的组。