你如何调试正则表达式?

roo*_*ook 148 regex debugging pcre

正则表达式可能变得非常复杂.缺少空白区域使他们难以阅读.我无法通过调试器使用正则表达式.那么专家如何调试复杂的正则表达式呢?

Mic*_*ick 67

您购买RegexBuddy并使用其内置的调试功能.如果你一年两次使用正则表达式,你可以及时将这笔钱及时存起来.RegexBuddy还将帮助您创建简单和复杂的正则表达式,甚至可以为您生成各种语言的代码.

替代文字

此外,根据开发人员的说法,当与WINE一起使用时,这个工具在Linux上几乎完美运行.

  • 谁说它是或被要求的? (37认同)
  • 太糟糕了,它仅限Windows,价格为40美元. (31认同)
  • 根据开发人员的说法,它可以通过WINE在Linux上运行:http://www.regexbuddy.com/wine.html.大约40美元的成本......你的时间值多少钱? (24认同)
  • 好吧,就像米克说的那样,你的时间值多少钱?"金钱可以买到的最好的工具"并不总是需要花钱,但有时他们会这么做.此外,JGSoft通过卓越的用户服务不断开发*优质*的产品.我甚至从他们那里购买了我并不真正需要的软件(比如RegexMagic),因为我想支持他们并保持他们的业务.你不知道你错过了什么.认真. (21认同)
  • 这不是免费软件. (18认同)
  • @KeynnyTM它在葡萄酒下工作,我得到报酬代码,这样可以省钱. (4认同)
  • @Tim:我不了解其他人,但它肯定会阻止*我*使用它。我的主要开发平台之一是 PowerPC Linux 机器。 (2认同)
  • 是Windows 8的截图吗?我没有意识到它可以在2010年2月上市. (2认同)
  • 我想我参加派对有点晚了,但我偶然发现了这个帖子,无法推荐http://www.regex101.com/.它并没有做regexbuddy所做的一切,但它接近它就该死的. (2认同)
  • @VicGoldfeld:我意识到我碰到了一个旧线程,但你应该查看现在提供调试器的http://regex101.com/.看看这个例子:http://i.imgur.com/Ilz80VV.png或http://regex101.com/r/wS5zF2/#debugger.调试器现在只运行PCRE. (2认同)

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)

  • +1:为什么有人会喜欢Regexbuddy呢? (12认同)

kev*_*vin 29

我将添加另一个,以便我不会忘记它:debuggex

它很好,因为它非常直观: Debuggex正则表达式助手的照片


the*_*iko 28

当我陷入正则表达式时,我通常会转向:https: //regexr.com/

它非常适合快速测试出错的地方.

  • 这个工具非常有用:它是网络托管的,因此无需安装,它是实时的,因此调试是一个梦想,它甚至还有有用的工具提示和特殊字符列表,以防您记不住某些东西。非常完美,非常感谢 (2认同)

Pas*_*ent 19

我使用Kodos - Python正则表达式调试器:

Kodos是一个Python GUI实用程序,用于为Python编程语言创建,测试和调试正则表达式.Kodos应该帮助任何开发人员高效,轻松地在Python中开发正则表达式.由于Python的正则表达式实现基于PCRE标准,因此Kodos应该使其他编程语言的开发人员受益,这些编程语言也遵循PCRE标准(Perl,PHP等...).

(......)

alt text http://kodos.sourceforge.net/images/match.gif

在Linux,Unix,Windows,Mac上运行.

  • Kodos不提供真正的调试功能.您无法执行正则表达式也不能暂停执行. (2认同)

Val*_*her 13

我认为他们没有.如果你的regexp过于复杂,而且你需要一个调试器就有问题,你应该创建一个特定的解析器,或者使用另一种方法.它将更具可读性和可维护性.

  • 老兄,你看完regexbuddy屏幕截图后发布了吗? (4认同)
  • 每个人都不同意这一点,但这不是一个坏主意.每个人都认为正则表达式引擎是最有效的,具有巨大的正则表达式.这不一定是真的,它们绝对不容易阅读.打破你的正则表达. (2认同)

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

  • @Rook,您可以在https://www.youtube.com/watch?v=zcSFIUiMgAs查看演示文稿 (3认同)

gfe*_*gfe 7

我使用这个在线工具来调试我的正则表达式:

http://www.regextester.com/

但是,它无法击败RegexBuddy.


cod*_*lic 6

我亲眼调试我的正则表达式.这就是我使用/x修饰符,为它们写注释并将它们分成几部分的原因.阅读Jeffrey Friedl的掌握正则表达式,了解如何开发快速且可读的正则表达式.各种正则表达式调试工具只会引发voodoo编程.


小智 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)