回溯与正则表达式中的反向引用有何不同?
反向引用获胜限制与回溯有何关系,反之亦然?
答案 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
表示数字)返回()
内捕获的组。