in reply to Pondering Regex::English
package Regexp::Simple; use overload; use Parse::RecDescent; local $/; my $translate = Parse::RecDescent->new(<DATA>); sub import { overload::constant qr => sub { return $translate->pattern($_[0]); } } 1; __DATA__ { sub wrap { "(?:$_[0])".($_[1]||"") } } pattern: element(s) { join '', @{$item{element}} } element: 'start_of_line' { '^' } | 'whitespace' { '\\s' } | 'digit' { '\\d' } | 'non_digit' { '\\D' } | 'literal' subpat { wrap $item{subpat} } | 'optional' subpat { wrap $item{subpat}, '?' } | 'many' subpat { wrap $item{subpat}, '+' } | 'any' subpatlist { wrap join "|", @{$item{subpatlist}} } | 'remember' subpat { "($item{subpat})" } | <perl_quotelike> { quotemeta $item[1][2] } # etc. as necessary subpat: '(' pattern ')' { $item[2] } subpatlist: '(' pattern(s /,/) ')' { $item[2] }
Then your example would become:
Since we all seem to be converging, I'll be happy collaborate (I have many more ideas for this module than those shown above above and it would be great to have someone else share the implementation effort.use Regexp::Simple; my $re = qr{ start_of_line literal("1998/10/08") optional( whitespace ) literal("[") remember( many( any( ":", digit ) ) ) non_digit }; if ('1998/10/08 [11:10]' =~ m/$re/) { print "Found a match at time $1!\n"; }
Send me some email if either (or both) of you are interested.
And, yes, the Regexp:: namespace is an abomination.
But it's the standard abomination for Perl 5, so we should
use it.
Damian
|
|---|