调试打开时,您如何理解re.pm的输出?

时间:2011-07-21 11:44:01

标签: regex perl

1 个答案:

答案 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!