Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/20.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Regex 在关闭支架之前查看回溯轨迹_Regex_Perl_Pcre - Fatal编程技术网

Regex 在关闭支架之前查看回溯轨迹

Regex 在关闭支架之前查看回溯轨迹,regex,perl,pcre,Regex,Perl,Pcre,注:此问题是从现在起删除其所有评论的结果 在正则表达式中使用lookaround构造的情况下,在结束括号之前会出现回溯或类似的情况。据我所知,Perl和PCRE调试器的输出出现了这种回溯: 问题是这个回溯是什么,为什么会出现,以及它是如何被解释为一个谎言的?回溯是一个谎言 这只是如何实现regex101调试器的结果。它使用一个名为PCRE\u AUTO\u CALLOUT的PCRE功能(标志)。此标志告诉PCRE引擎在匹配的每个步骤调用用户定义的函数。此功能接收当前匹配状态作为输入 问题在于,

注:此问题是从现在起删除其所有评论的结果

在正则表达式中使用lookaround构造的情况下,在结束括号之前会出现回溯或类似的情况。据我所知,Perl和PCRE调试器的输出出现了这种回溯:


问题是这个回溯是什么,为什么会出现,以及它是如何被解释为一个谎言的?

回溯是一个谎言

这只是如何实现regex101调试器的结果。它使用一个名为
PCRE\u AUTO\u CALLOUT
的PCRE功能(标志)。此标志告诉PCRE引擎在匹配的每个步骤调用用户定义的函数。此功能接收当前匹配状态作为输入

问题在于,PCRE不会在调用真正回溯时告诉调用。Regex101必须根据匹配状态推断

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


以下是启用自动标注的图案的内部PCRE表示法,以供参考:

$pcreset测试
PCRE版本8.38 2015-11-23
re>/a(?=\uu)b/DC
------------------------------------------------------------------
0.59胸罩
3详图索引255 0 1
9 a
11详图索引255 1 5
17断言
20详图索引255 4 1
26     _
28详图索引255 5 0
34 17基特
37详图索引255 6 1
43     _
45详图索引255 7 1
51 b
53详图索引255 8 0
59 59基特
62结束
------------------------------------------------------------------
捕获子模式计数=0
选项:
第一个字符='a'
需要字符='b'

如您所见,这里没有分支操作码,只有一个
Assert

不仅是regex101(PCRE和Python)调试器将其显示为回溯步骤,而且Perl调试器也会这样做。关于它们呢?@revo Perl是一个不同的引擎,但它可以归结为如何定义回溯。如果将其定义为“在匹配字符串中返回”,则是,将发生回溯。如果您将其定义为“尝试其他选择”,那么发生的只是一个断言结束。我的猜测是,定义是由实现引导的(使用第一个定义可能更容易)。我知道,这就是为什么我将其视为一种有问题的回溯。如果调用是罪魁祸首,那么Perl应该有一个没有的区别。@revo:“Perl debugger也这么做了”我之前提到过:我在Perl重新调试输出中没有看到任何关于“回溯”的引用。是什么让你觉得它在那里?@revo:我向模块的作者达米安·康威提出了这个问题,他回答说:“这是自动描述生成中的一个错误。我刚刚修补了它,并上传了一个新版本,在积极前瞻结束后将消息更改为重置匹配位置,这更具描述性。”