Beefy Boxes and Bandwidth Generously Provided by pair Networks
There's more than one way to do things
 
PerlMonks  

Regex assistance, please.

by clueless newbie (Friar)
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*###+

Comment on Regex assistance, please.
Select or Download Code
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 the web crawler heard nothing...

How do I use this? | Other CB clients
Other Users?
Others romping around the Monastery: (13)
As of 2014-08-21 23:31 GMT
Sections?
Information?
Find Nodes?
Leftovers?
    Voting Booth?

    The best computer themed movie is:











    Results (144 votes), past polls