在正则表达式中,什么是回溯/反向引用?

时间:2012-01-25 22:51:13

标签: regex

使用正则表达式回溯是什么意思?

另外,你能提供一个例子吗?

1 个答案:

答案 0 :(得分:64)

反向引用和回溯是两回事。前者使用稍后在代码中捕获的结果,例如

(['"]).*?\1

这将匹配单引号或双引号字符串(暂时忽略转义)。它使用反向引用来引用开放符号(单引号或双引号),以便它可以匹配最后的符号。

另一方面,回溯是正常表达式在匹配失败时匹配过程中自然会做的事情。例如,如果我匹配表达式

.+b

反对字符串

aaaaaabcd

然后它将首先与aaaaaabc上的.+匹配,并将b与剩余的d进行比较。这会失败,因此会稍微回溯并匹配aaaaaab的{​​{1}},然后将最终的.+b进行比较。此操作也会失败,因此会再次回溯并尝试c aaaaaa.+b匹配并成功。