NAME

Parse::RandGen::Regexp - Regular expression Condition element.

DESCRIPTION

Regexp is a Condition element that matches the given compiled regular expression. For picking random data, the regular expression is parsed into its component Subrules, Literals, CharClasses, etc.... Therefore, the pick functionality for a regular expression is ultimately the same as the pick functionality of a Rule (including the limitations w/r to greediness - see Rule).

Regexp is also useful as a standalone class. It supports captures (named and indexed), which can be referenced in a call to the pick() function to force the captures to match the specified data, while leaving the rest of the data to be generated randomly.

METHODS

new

Creates a new Regexp. The first argument (required) is the regular expression element (e.g. qr/foo(bar|baz)+\d{1,10}/). All other arguments are named pairs.

element

Returns the Regexp element (i.e. the compiled regular expression itself).

numCaptures

Returns the number of captures (e.g. $1, $2, ...$n) in the regular expression.

nameCapture

Give names to capture numbers for the regular expression. The arguments to this function are capture# => "name" pairs (e.g. nameCapture(1=>"directory", 2=>"file", 3=>"extension")).

capture

Returns the Rule object that represents the specified capture. The capture can be specified by number or by name (the name is set by the nameCapture() function).

pick

Randomly generate data (text) that matches (or does not) this regular expression.

Takes a "match" boolean argument that specifies whether to match the regular expression or deliberately not match it.

Also takes a "captures" hash argument that has pairs of capture numbers (or names) and their desired value. This allows the generated data to have user-specified constraints while allowing the rest of the regular expression to choose random data. If "match" is false, the user-specified "captures" values are still used (which may cause the data to match even though it was not supposed to).

Example:
    $re->pick(match=>1,
              captures=>{ 1=>"http", 2=>"www", 3=>"yahoo", 4=>"com" });

SEE ALSO

Parse::RandGen::Condition, Parse::RandGen::Subrule, Parse::RandGen::Literal, Parse::RandGen::CharClass, Parse::RandGen::Rule, Parse::RandGen::Production, and Parse::RandGen

AUTHORS

Jeff Dutton