gpt4 book ai didi

regex - 在结束括号之前环顾四周回溯

转载 作者:行者123 更新时间:2023-12-01 09:22:14 26 4
gpt4 key购买 nike

注意:这个问题是another answer的结果截至目前,所有评论均已删除。

如果在正则表达式中使用环视构造,则在右括号之前会发生回溯或一种。据我所知,这个回溯涉及到 Perl 和 PCRE 调试器的输出:

enter image description here

问题是这个backtrack 是什么,它为什么在那里以及它如何被解释为 backtrack

最佳答案

回溯是谎言。

这只是 regex101 调试器实现方式的结果。它使用称为 PCRE_AUTO_CALLOUT 的 PCRE 功能(标志)。此标志告诉 PCRE 引擎在匹配的 步调用用户定义的函数。此函数接收当前匹配状态作为输入。

要注意的是 PCRE 不会在它真的回溯时告诉标注。 Regex101 必须从匹配状态中推断出这一点。

如您所见,在“回溯”发生之前的步骤中,当前匹配的文本是a_,而就在您退出lookahead之后,它是恢复为 a。 Regex101 注意到匹配的文本较短,因此它推断一定发生了回溯,结果是您注意到的令人困惑的结果。


作为引用,这里是启用了自动标注的模式的内部 PCRE 表示:

$ pcretest
PCRE version 8.38 2015-11-23

re> /a(?=_)_b/DC
------------------------------------------------------------------
0 59 Bra
3 Callout 255 0 1
9 a
11 Callout 255 1 5
17 17 Assert
20 Callout 255 4 1
26 _
28 Callout 255 5 0
34 17 Ket
37 Callout 255 6 1
43 _
45 Callout 255 7 1
51 b
53 Callout 255 8 0
59 59 Ket
62 End
------------------------------------------------------------------
Capturing subpattern count = 0
Options:
First char = 'a'
Need char = 'b'

如您所见,那里没有分支操作码,只有一个断言

关于regex - 在结束括号之前环顾四周回溯,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39343821/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com