NAME
Regexp::Shellish - Shell-like regular expressions
SYNOPSIS
use Regexp::Shellish qw( :all ) ;$re = compile_shellish( 'a/c*d' ) ;## This next one's like 'a*d' except that it'll## match 'a/d'.$re = compile_shellish( 'a**d' ) ;## And here '**' won't match 'a/d', but behaves## like 'a*d', except for the possibility of high## cpu time consumption.$re = compile_shellish( 'a**d', { star_star => 0 } ) ;## The next two result in identical $re1 and $re2.## The second is a noop so that Regexp references can## be easily accomodated.$re1 = compile_shellish( 'a{b,c}d' ) ;$re2 = compile_shellish( qr/\A(?:a(?:b|c)d)\Z/ ) ;@matches = shellish_glob( $re, @possibilities ) ;
DESCRIPTION
Provides shell-like regular expressions. The wildcards provided are "?", "*" and "**", where "**" is like "*" but matches "/". See "compile_shellish" for details.
Case sensitivity and constructs like <**>, "(a*b)", and "{a,b,c}" can be disabled.
- compile_shellish
-
Compiles a string containing a 'shellish' regular expression, returning a Regexp reference. Regexp references passed in are passed through unmolested.
Here are the transformation rules from shellish expression terms to perl regular expression terms:
Shellish Perl RE======== =======* [^/]*? .** .* ## unless { star_star => 0 }... .* ## unless { dot_dot_dot => 0 }( ( ## unless { parens => 0 }) ) ## unless { parens => 0 }{a,b,c} (?:a|b|c) ## unless { braces => 0 }\a a ## These are de-escaped and\* \* ## passed to quotemeta()The wildcards treat newlines as normal characters.
Parens group in to
$1..$n, since they are passed through unmolested (unless option parens => 0 is passed). This is useless when using glob_shellish(), though.The final parameter can be a hash reference containing options:
compile_shellish('**',{anchors => 0, ## Doesn't put ^ and $ around the## resulting regexpcase_sensitive => 0, ## Make case insensitivedot_dot_dot => 0, ## '...' is now just three '.' charsstar_star => 0, ## '**' is now two '*' wildcardsparens => 0, ## '(', ')' are now regular charsbraces => 0, ## '{', '}' are now regular chars}) ;No option affects Regexps passed through.
- shellish_glob
-
Pass a regular expression and a list of possible values, get back a list of matching values.
my @matches = shellish_glob( '*/*', @possibilities ) ;my @matches = shellish_glob( '*/*', @possibilities, \%options ) ;
AUTHOR
Barrie Slaymaker <[email protected]>