roo*_*ook 148 regex debugging pcre
正则表达式可能变得非常复杂.缺少空白区域使他们难以阅读.我无法通过调试器使用正则表达式.那么专家如何调试复杂的正则表达式呢?
Mic*_*ick 67
您购买RegexBuddy并使用其内置的调试功能.如果你一年两次使用正则表达式,你可以及时将这笔钱及时存起来.RegexBuddy还将帮助您创建简单和复杂的正则表达式,甚至可以为您生成各种语言的代码.

此外,根据开发人员的说法,当与WINE一起使用时,这个工具在Linux上几乎完美运行.
eph*_*ent 51
使用Perl 5.10 , use re 'debug';. (或者debugcolor,我无法在Stack Overflow上正确格式化输出.)
$ perl -Mre=debug -e'"foobar"=~/(.)\1/'
Compiling REx "(.)\1"
Final program:
1: OPEN1 (3)
3: REG_ANY (4)
4: CLOSE1 (6)
6: REF1 (8)
8: END (0)
minlen 1
Matching REx "(.)\1" against "foobar"
0 <> <foobar> | 1:OPEN1(3)
0 <> <foobar> | 3:REG_ANY(4)
1 <f> <oobar> | 4:CLOSE1(6)
1 <f> <oobar> | 6:REF1(8)
failed...
1 <f> <oobar> | 1:OPEN1(3)
1 <f> <oobar> | 3:REG_ANY(4)
2 <fo> <obar> | 4:CLOSE1(6)
2 <fo> <obar> | 6:REF1(8)
3 <foo> <bar> | 8:END(0)
Match successful!
Freeing REx: "(.)\1"
此外,您可以向正则表达式添加空格和注释,以使它们更具可读性.在Perl中,这是使用/x修饰符完成的.有pcre,有PCRE_EXTENDED旗帜.
"foobar" =~ /
(.) # any character, followed by a
\1 # repeat of previously matched character
/x;
pcre *pat = pcre_compile("(.) # any character, followed by a\n"
"\\1 # repeat of previously matched character\n",
PCRE_EXTENDED,
...);
pcre_exec(pat, NULL, "foobar", ...);
Run Code Online (Sandbox Code Playgroud)
the*_*iko 28
当我陷入正则表达式时,我通常会转向:https: //regexr.com/
它非常适合快速测试出错的地方.
Val*_*her 13
我认为他们没有.如果你的regexp过于复杂,而且你需要一个调试器就有问题,你应该创建一个特定的解析器,或者使用另一种方法.它将更具可读性和可维护性.
APC*_*APC 12
有一个很好的免费工具,Regex Coach.最新版本仅适用于Windows; 它的作者Edmund Weitz博士停止维护Linux版本,因为很少有人下载它,但下载页面上有一个旧的Linux版本.
小智 8
我刚刚看到其创建者:Damian Conway的Regexp :: Debugger演示文稿.令人印象深刻的东西:就地运行,或者使用命令行工具(rxrx),交互方式或在"登录"执行文件(存储在JSON),前进或后退,在任何时候,停在断点或事件,彩色输出(用户可配置),regexp上的热图和优化的字符串等...
可在CPAN上免费获取:http: //search.cpan.org/~dconway/Regexp-Debugger/lib/Regexp/Debugger.pm
小智 5
至于我,我通常使用pcretest实用程序,可以转储任何正则表达式的字节代码,通常它更容易阅读(至少对我来说).例:
PCRE version 8.30-PT1 2012-01-01
re> /ab|c[de]/iB
------------------------------------------------------------------
0 7 Bra
3 /i ab
7 38 Alt
10 /i c
12 [DEde]
45 45 Ket
48 End
------------------------------------------------------------------
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
32678 次 |
| 最近记录: |