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



在计算m//s///表达式期间,是否有一种方便的方法可以跟踪正则表达式引擎的状态?


顺便说一句,我知道有一个 Regexp::D ebugger 包可以通过 CPAN 获得(它非常酷(,但我看不到从中获得任何跟踪的方法;我不想逐步完成潜在的大量步骤。

是的。将正则表达式引擎切换到调试模式,它将打印它正在执行的操作:

use re 'debug'; 
my $str = "abcdefg";
$str =~ m/[ef]+/;

它给出的输出为:

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]+"

最新更新