代码之家  ›  专栏  ›  技术社区  ›  Blixt

有哪些工具可以调试/单步执行正则表达式?

  •  5
  • Blixt  · 技术社区  · 15 年前

    虽然有许多好的在线和离线测试正则表达式的工具,但我还没有找到一个工具(此外 RegexBuddy )这样我就可以看到正则表达式引擎查找匹配项(或者查找没有匹配项)所采取的步骤。

    有人知道有什么工具可以做到这一点吗?我最初排除的原因 雷格斯巴迪 这是因为它是商业性的,在我决定付钱之前,我更愿意看看我的选择。

    为了更清楚我想要什么,这里有一张截图 雷格斯巴迪 (从他们的主页上): http://img166.imageshack.us/img166/1272/debug.png

    6 回复  |  直到 6 年前
        1
  •  1
  •   groovingandi    15 年前

    也许Regexcoach提供了你想要的…

    http://weitz.de/regex-coach/

        2
  •  4
  •   Brad Gilbert    15 年前

    在Perl中,您可以 use re 'debug'; use re 'debugcolor';

    例如,如果将其输入Perl:

    use strict;
    use warnings;
    use 5.010;
    use re 'debug';
    
    # using the same strings as the question's image for reference:
    
    my $str = 'Even if I do say so myself: "RegexBuddy is awesome"';
    $str =~ /(Regexp?Buddy is (awful|acceptable|awesome))/;
    

    这就是你能得到的:

    Compiling REx "(Regexp?Buddy is (awful|acceptable|awesome))"
    Final program:
       1: OPEN1 (3)
       3:   EXACT <Regex> (6)
       6:   CURLY {0,1} (10)
       8:     EXACT <p> (0)
      10:   EXACT <Buddy is > (14)
      14:   OPEN2 (16)
      16:     EXACT <a> (18)
      18:     TRIEC-EXACT[cw] (29) # this is a new feature in Perl 5.10
              <wful> 
              <cceptable> 
              <wesome> 
      29:   CLOSE2 (31)
      31: CLOSE1 (33)
      33: END (0)
    
    anchored "Regex" at 0 floating "Buddy is a" at 5..6 (checking floating) minlen 19 
    Guessing start of match in sv for REx "(Regexp?Buddy is (awful|acceptable|awesome))" against 'Even if I do say so myself: "RegexBuddy is awesome"'
    Found floating substr "Buddy is a" at offset 34...
    Found anchored substr "Regex" at offset 29...
    Starting position does not contradict # /^/m...
    Guessed: match at offset 29
    
    Matching REx "(Regexp?Buddy is (awful|acceptable|awesome))" against 'RegexBuddy is awesome"'
      29 <'lf: "'> <RegexBuddy>  |  1:OPEN1(3)
      29 <'lf: "'> <RegexBuddy>  |  3:EXACT <Regex>(6)
      34 <Regex> <Buddy is a>    |  6:CURLY {0,1}(10)
                                      EXACT <p> can match 0 times out of 1...
      34 <Regex> <Buddy is a>    | 10:  EXACT <Buddy is >(14)
      43 <y is > <'awesome"'>    | 14:  OPEN2(16)
      43 <y is > <'awesome"'>    | 16:  EXACT <a>(18)
      44 < is a> <'wesome"'>     | 18:  TRIEC-EXACT[cw](29)
      44 < is a> <'wesome"'>     |      State:    2 Accepted:    0 Charid:  2 CP:  77 After State:    3
      45 < is aw> <'esome"'>     |      State:    3 Accepted:    0 Charid:  7 CP:  65 After State:   10
      46 < is awe> <'some"'>     |      State:   10 Accepted:    0 Charid:  b CP:  73 After State:   11
      47 < is awes> <'ome"'>     |      State:   11 Accepted:    0 Charid:  c CP:  6f After State:   12
      48 < is aweso> <'me"'>     |      State:   12 Accepted:    0 Charid:  d CP:  6d After State:   13
      49 < is awesom> <'e"'>     |      State:   13 Accepted:    0 Charid:  7 CP:  65 After State:   14
      50 < is awesome> <'"'>     |      State:   14 Accepted:    1 Charid:  3 CP:   0 After State:    0
                                        got 1 possible matches
                                        only one match left: #3 <wesome>
      50 < is awesome> <'"'>     | 29:  CLOSE2(31)
      50 < is awesome> <'"'>     | 31:  CLOSE1(33)
      50 < is awesome> <'"'>     | 33:  END(0)
    Match successful!
    Freeing REx: "(Regexp?Buddy is (awful|acceptable|awesome))"
    

    (注意:我更改了输出的某些部分,以便更好地突出显示)

        3
  •  2
  •   Dan Breen    15 年前

    它不如RegexBuddy强大,但它是一个简单的在线界面: http://www.gskinner.com/RegExr/

    你可以将鼠标移到你的部分表达式上,它会告诉你它在做什么。非常基本,但当你做一些愚蠢的事情时,它确实可以节省时间。

        4
  •  1
  •   Alex W    9 年前

    Debuggex 有我见过的最好的图形化方法。它基本上向你展示了 DFA 图表将类似于给定的正则表达式,具有匹配的基本突出显示,并在底部有一个滑块,允许您逐步通过匹配和DFA图表:

    enter image description here

        5
  •  0
  •   Jonathan Applebaum    6 年前

    尝试 CodVerter regex tester 在线regex测试仪验证正则表达式模式。
    在键入时编辑器正在更新,可以根据需要更改标志。

    可以将工作保存到本地或云端,以便通过用户帐户中的高级存储库管理器进行进一步编辑。当保存到云端时,您可以生成一个链接来与任何人共享您的工作。

    来自CodVerter's Regex测试仪的IP Regex模式示例 enter image description here

    如果您需要更复杂的工具来处理多个regex模式,请尝试 CodVerter multiple regex patterns scanner

    这是一个短 tutorial 关于这个工具

    (完全公开:我是CodVerter的开发者之一)

        6
  •  -1
  •   Bluehorn    15 年前

    可能是这样的,因为regex引擎如何找到匹配并不重要。RegexBuddy的屏幕截图使我想使用另一个Regexp Matcher,因为不需要进行回溯。

    通常,您会将正则表达式转换为 nondeterministic finite automaton (NFA) 或A deterministic finite automaton (DFA) ,它可以处理正则表达式而不进行回溯。

    也就是说,我所知道的创建和测试正则表达式的唯一免费工具是 pyreb .