Regular expression visualization using Graph::Easy


  use Regexp::Visualize::Simple
  $parser = ... Regexp::Parser object ...;
  my $v = Regexp::Visualize::Simple->new;
  $v->push_regexp_node ($parser->root);
  while ($v->has_regexp_node) {
    my ($g, $index) = $v->next_graph;
    # $g is a Graph::Easy object
    print "$index:\n";
    print $g->as_svg;


The Regexp::Visualize::Simple generates a series of Graph::Easy objects, which as a whole represents a regular expression parsed by Regexp::Parser. Generated graphs can be exported to arbitrary image format, such as PNG and SVG, supported by Graph::Easy. As an input any regular expression dialect supported by Regexp::Parser or its subclasses can be used.

It is sometimes impossible or undesired to represents a regular expression as one complete graph. For example, if a regular expression containing (?!...) segment were represented as a graph, it would be difficult to understand. Therefore, the result visualization might sometimes be split into multiple graphs. This is why this module defines iterator methods has_regexp_node and next_graph.


$v = Regexp::Visualize::Simple->new;

Creates a new instance of the regular expression visualizer.

$v->push_regexp_node ($node);

Push a regular expression node that represents a subgraph to be visualized.

$node = $v->shift_regexp_node ();

Shifts a regular expression node from the queue hold by the visualizer object, if any, or returns undef.

$boolean = $v->has_regexp_node ();

Returns whether the visualizer object contains one or more nodes in the queue of regular expression nodes to be graphized.

($g, $index) = $v->next_graph ();

Generates a graph from the first node in the queue o the regular expression node hold by the visualizer object.

If there is no node to be graphized in the queue, then a list of two undef values is returned.

Otherwise, a list of the Graph::Easy object generated from the regular expression node and the index number of the graph is returned. The first graph generated by the visualizer object has the index of zero (0), and the next graph has one (1).


This module requires Perl 5.10.0 or later.

This module depends on the Graph::Easy module.

This module assumes the input regular expression nodes implementing Regexp::Parser-compatible interface. Such modules include Regexp::Parser::Perl58 and Regexp::Parser::JavaScript.


The latest version of this module is available at

Regular expression visualizer This is a Web interface for this module. Its source code is available at,cvslog.

Regexp::Parser::Perl58 - A subclass of Regexp::Parser supporting Perl 5.8 regular expression syntax.

Regexp::Parser::JavaScript - A subclass of Regexp::Parser supporting JavaScript regular expression syntax.

These two modules above are available at

Graph::Easy. This module is available from CPAN.


CVS log:,cvslog.

Bug tracking system:


Localization / customization support.


Wakaba <>.


Copyright 2008-2009 Wakaba <>.

This library is free software; you can redistribute it and/or modify it under the same terms as Perl itself.