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

chr*_*lee 42 regex

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

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

Lil*_*ard 70

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

(['"]).*?\1
Run Code Online (Sandbox Code Playgroud)

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

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

.+b
Run Code Online (Sandbox Code Playgroud)

反对字符串

aaaaaabcd
Run Code Online (Sandbox Code Playgroud)

那么它会首先匹配aaaaaabc.+和比较b反对剩余d.这种失败,所以它回溯了一下,相匹配aaaaaab.+,然后比较最终的b反对c.这也会失败,所以它再次回溯,并试图aaaaaa.+与比赛的b对抗b和成功.

  • 可以在 https://community.appway.com/screen/kb/article/checking-strings-avoiding-catastropic-backtracking-1482810891360#:%7E:text=Catastropic%20backtracking%20is%20a% 找到更详细的答案20条件,%20字符串%20与%20不%20匹配 (3认同)