如何跟踪正则表达式匹配的执行?

kjo*_*kjo 4 regex perl trace pcre

有没有一种方便的方式来获得一个跟踪的评估过程中,正则表达式引擎的状态m//s///表达?


顺便说一句,我所知道的,有一个正则表达式::调试器包通过CPAN获得(和它惊人的冷静),但我不明白的方式来获得像它跟踪任何东西; 我不想逐步完成大量的步骤.

Sob*_*que 8

是.将正则表达式引擎转为调试模式,它将打印它正在做的事情:

use re 'debug'; 

my $str = "abcdefg";
$str =~ m/[ef]+/;
Run Code Online (Sandbox Code Playgroud)

这给出了一个输出:

Compiling REx "[ef]+"
Final program:
   1: PLUS (13)
   2:   ANYOF[ef] (0)
  13: END (0)
stclass ANYOF[ef] plus minlen 1 
Matching REx "[ef]+" against "abcdefg"
Matching stclass ANYOF[ef] against "abcdefg" (7 bytes)
   4 <abcd> <efg>            |  1:PLUS(13)
                                  ANYOF[ef] can match 2 times out of 2147483647...
   6 <abcdef> <g>            | 13:  END(0)
Match successful!
Freeing REx: "[ef]+"
Run Code Online (Sandbox Code Playgroud)

  • 如果您不想编辑脚本,可以使用`PERL5OPT = -Mre = debug script.pl`来启用它. (3认同)