---
name: "GraphViz2::Parse::Regexp"
section: "3pm"
platform: "linux"
package: "libgraphviz2-perl"
version: "2.67-2"
release: "Debian 13 (Trixie)"
platforms: ["linux"]
url: "https://new.carta.tech/GraphViz2::Parse::Regexp"
---

# GraphViz2::Parse::Regexp(3pm)

Visualize a Perl regular expression as a graph

## NAME

GraphViz2::Parse::Regexp - Visualize a Perl regular expression as a graph

## SYNOPSIS

```
    use GraphViz2::Parse::Regexp;
    # no objects - quicker
    my $gd = GraphViz2::Parse::Regexp::to_graph('(([abcd0-9])|(foo))');
    # populate a GraphViz2 object with a Graph::Directed of a regexp
    my $gv = GraphViz2->from_graph(GraphViz2::Parse::Regexp::graphvizify($gd));
    # OO interface, using lazy-built attributes
    my $gvre = GraphViz2::Parse::Regexp->new(regexp => $regexp);
    my $gd = $gvre->as_graph; # Graph::Directed object
    # or supply a suitable Graph::Directed object
    my $gvre = GraphViz2::Parse::Regexp->new(as_graph => $gd);
    # then get the GraphViz2 object
    my $gv = $gvre->graph;
    # DEPRECATED ways to get $gvre with populated $gv
    my $gvre = GraphViz2::Parse::Regexp->new;
    $gvre->create(regexp => '(([abcd0-9])|(foo))');
    my $gv = $gvre->graph;
    # or give it a pre-set-up GraphViz2 object
    my $gv = GraphViz2->new(...);
    my $gvre = GraphViz2::Parse::Regexp->new(graph => $gv);
    # call ->create as above
    # produce a visualisation
    my $format = shift || 'svg';
    my $output_file = shift || "output.$format";
    $gv->run(format => $format, output_file => $output_file);
```

See *t/gen.parse.regexp.t*.

## DESCRIPTION

Takes a Perl regular expression and converts it into a Graph::Directed object, or directly into a GraphViz2 object.

## FUNCTIONS

This is the recommended interface.

### to\_graph

```
    my $gd = GraphViz2::Parse::Regexp::to_graph('(([abcd0-9])|(foo))');
```

Given a Perl regular expression, returns a Graph::Directed object describing the finite state machine for it.

### graphvizify

```
    my $gv = GraphViz2->from_graph(GraphViz2::Parse::Regexp::graphvizify($gd));
```

Mutates the given graph object to add to it the `"graphviz"` attributes visualisation "hints" that will make the "from\_graph" in GraphViz2 method visualise this regular expression in the most meaningful way, including labels and groupings.

It is idempotent as it simply sets the `"graphviz"` attribute of the relevant graph entities.

Returns the graph object for convenience.

## METHODS

This is a Moo class, but with a recommended functional interface.

### Constructor attributes

*regexp*

The regular expression to use.

This key is optional. You need to provide it by the time you access either the "as\_graph" or "graph".

*as\_graph*

The Graph::Directed object to use. If not given, will be lazily built on access, from the "regexp".

*graph*

The GraphViz2 object to use. This allows you to configure it as desired.

This key is optional. If provided, the `"create"` method will populate it. If not, it will have these defaults, lazy-built and populated from the "as\_graph".

```
    my $gv = GraphViz2->new(
            edge   => {color => 'grey'},
            global => {directed => 1},
            graph  => {rankdir => 'TB'},
            node   => {color => 'blue', shape => 'oval'},
    );
```

### create(regexp =\> $regexp)

DEPRECATED. Mutates the object to set the `"regexp"` attribute, then accesses the `"as_graph"` attribute (possibly lazy-building it), then `"graphvizify"`s its `"as_graph"` attribute with that information, then `"from_graph"`s its `"graph"`.

Returns `$self` for method chaining.

## THANKS

Many thanks are due to the people who chose to make Graphviz \<http://www.graphviz.org/\> Open Source.

And thanks to Leon Brocard \<http://search.cpan.org/~lbrocard/\>, who wrote GraphViz, and kindly gave me co-maint of the module.

## AUTHOR

GraphViz2 was written by Ron Savage *\<ron@savage.net.au\>* in 2011.

Home page: \<http://savage.net.au/index.html\>.

## COPYRIGHT

Australian copyright (c) 2011, Ron Savage.

All Programs of mine are 'OSI Certified Open Source Software'; you can redistribute them and/or modify them under the terms of The Perl License, a copy of which is available at: http://dev.perl.org/licenses/
