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

标签 regex perl pcre trace

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

顺便说一句,我知道有一个 Regexp::Debugger package可以通过 CPAN 获得(而且它非常酷),但我没有看到一种方法可以从中获得任何类似的痕迹;我不想逐步完成大量潜在的步骤。

最佳答案

是的。将正则表达式引擎转为 Debug模式,它将打印正在执行的操作:

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

关于regex - 如何跟踪正则表达式匹配的执行?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45842317/

相关文章:

perl - 使用 sed/perl/awk 替换第一次出现的匹配文本

perl - 如何使用 Perl 的 Getopt::Long 按照用户输入的顺序获取选项?

c - pcre C API 只返回第一个匹配项

c# - 正则表达式需要将字母数字字符串与一个数字的最小值进行匹配向前看只检查第二个位置

java - 从java文件中删除注释并维护文件结构

multithreading - 控制 Fork super 队列的长度

php - 正则表达式匹配列表中的字符,除非存在另一个列表中的字符

php - 计算 PHP PCRE RegEx 中的子模式

java - 在java中匹配正则表达式

c++ - Boost.Regex 与 C++11 正则表达式