Beefy Boxes and Bandwidth Generously Provided by pair Networks
Your skill will accomplish
what the force of many cannot
 
PerlMonks  

Regex assistance, please.

by clueless newbie (Chaplain)
on Oct 21, 2012 at 17:42 UTC ( #1000227=perlquestion: print w/replies, xml ) Need Help??
clueless newbie has asked for the wisdom of the Perl Monks concerning the following question:

While the following code works, it offends me because the regex on the line marked with #!!!!! captures only a single line and I'd prefer to capture everything up to the next Smart Comment. Where's my "misteak?"

#!/usr/bin/perl use Data::Dumper; use strict; use warnings; use v5.10; local $/; my $code_s=<DATA>; while ($code_s !~ m{\G$}cg) { if ($code_s =~ m{\G^(\s*###+.*\n)}cgm) { # $1 is a Smart Comment upto and including the \n warn Data::Dumper->Dump([\$1],[qw(*1)]).' '; # Since the \n was captured we don't need to bump pos($cod +e_s) #pos($code_s)++; } elsif ($code_s =~ m{\G((?:.*$)*)(?!\s*###+)}cgm) { #!!!!! # $1 only captures a single line # why not multiple lines complete with their \n? warn Data::Dumper->Dump([\$1],[qw(*1)]).' '; pos($code_s)++; } else { my $pos=pos($code_s); my $residue=substr($code_s,$pos); die 'WTF:\n'.Data::Dumper->Dump([\$pos,\$residue],[qw(*pos + *residue)]); }; }; exit; __END__ no ### yes # ### no no no #### yes

yields

$1 = \'no'; at Parse.pl line 20, <DATA> chunk 1. $1 = \' ### yes '; at Parse.pl line 14, <DATA> chunk 1. $1 = \' # ### no'; at Parse.pl line 20, <DATA> chunk 1. $1 = \'no '; at Parse.pl line 20, <DATA> chunk 1. $1 = \'no '; at Parse.pl line 20, <DATA> chunk 1. $1 = \' #### yes '; at Parse.pl line 14, <DATA> chunk 1.

Note I corrected \s###+ to \s*###+

Replies are listed 'Best First'.
Re: Regex assistance, please.
by moritz (Cardinal) on Oct 21, 2012 at 17:49 UTC

      Thank you, moritz. But changing the cgm to cgms causes $1 on the marked line to capture everything including the "Smart Comments"

Log In?
Username:
Password:

What's my password?
Create A New User
Node Status?
node history
Node Type: perlquestion [id://1000227]
Approved by moritz
help
Chatterbox?
and all is quiet...

How do I use this? | Other CB clients
Other Users?
Others examining the Monastery: (6)
As of 2017-01-16 22:07 GMT
Sections?
Information?
Find Nodes?
Leftovers?
    Voting Booth?
    Do you watch meteor showers?




    Results (151 votes). Check out past polls.