答案 0 :(得分:6)
输出有两个重要部分:模式编译和运行时匹配。
第一部分描述了编译自动机中的节点,其中有三个节点。
STAR(n)
匹配以下节点的零个或多个,并继续通过节点 n 。REG_ANY
匹配除换行符之外的任何字符(即。,/./
)END
标记自动机的结束状态。 MBOL
匹配多行匹配模式中的行首,即,/^/m
。这是隐含的,因为模式开头的.*
。 (请记住:默认情况下,正则表达式量词是贪婪的。)
与您的模式匹配的字符串的最小长度为零,或者为空字符串。 (请记住:*
量词总是成功!)
偏移量的格式为
NODENUM:POSITION[LENGTH]
并将节点链接到程序中的正则表达式。在您的情况下,.*
(节点2和1)从模式中的第一个位置开始,结束状态是隐含的。适用于正则表达式调试器的偏移,例如,以突出显示当前正在尝试匹配的子模式。
现在它被编译,它可以匹配,后一部分跟踪执行。 Pragmas and Debugging section of the perlretut documentation解释了描述匹配进度的行的形式:
每个步骤的格式为
n <x> <y>
,其中<x>
字符串部分匹配,<y>
部分尚未匹配。
您的问题中的匹配开始时没有消耗任何文字,然后.*
匹配a
,并且模式匹配成功。
评估范围是与executable code in regexes相关的机制,您不使用。
Debugging Regular Expressions section of the perldebguts documentation提供更多背景信息,并且一如既往地使用来源,Luke!