Beefy Boxes and Bandwidth Generously Provided by pair Networks
No such thing as a small change
 
PerlMonks  

Re: multi-line regex match quest

by sauoq (Abbot)
on Sep 29, 2002 at 05:20 UTC ( #201522=note: print w/ replies, xml ) Need Help??


in reply to multi-line regex match quest

$ret = $1 if $g =~ /\n\s*\n((?m:^#.*\n)+)$id/;

-sauoq
"My two cents aren't worth a dime.";


Comment on Re: multi-line regex match quest
Download Code
Re: Re: multi-line regex match quest
by smackdab (Pilgrim) on Sep 29, 2002 at 06:04 UTC
    AWESOME AWESOME AWESOME
    thanks thanks thanks
    (I only understand it about 50% so far...)
      (I only understand it about 50% so far...)

      Well let me see if I can shed some light.

      $ret = $1 if $g =~ /\n\s*\n((?m:^#.*\n)+)$id/;
      The first bit is obviously just assigning $1 to $ret if the pattern matches. That's the easy part. Now let's look at the pattern.
      /\n\s*\n # This matches your blank line between comments. ( # Capture into $1. (?m: # Don't capture, but match this group as multiline. Wh +ich means match '^' and '$' # at the beginning or end of any line in the string. ^# # Match the comment delimiter at the start of a line. .*\n # Match everything up to, and including, the newline a +t the end of a line. )+ # Match this group one or more times. ) # End of $1 capture. $id # This is the key you're looking for. /x
      Very well done. sauoq++

      kelan


      Yak it up with Fullscreen ChatBox

        And since I'm getting excited about Perl6 pattern matching and want the practice, let's do this with a Perl6 rule, line for line with the above Perl5 regex.
        # <Perl6> /^^ \h* $$ # Match a line that only contains horizontal whitespace, + if anything (blank line). ( # Capture to $1. [ # Group, but don't capture. ^^ \# # Comment delimiter at the start of a line. .* $$ # Everything until the end of the line, includes the new +line. ]+ # One or more comment lines in a row. ) # End $1 capture. $id # The key we're looking for. This matches as a literal s +tring, not a pattern. / # </Perl6>
        And here's the short version:
        m/^^ \h* $$ $ret:=([^^ \# .* $$]+) $id/;
        You can see I added a small bit ('$ret:=') just before the capture. This binds the value of the capture, $1 in this case, to $ret if the pattern matches, but not if it fails. Just what we want.

        kelan


        Yak it up with Fullscreen ChatBox

Log In?
Username:
Password:

What's my password?
Create A New User
Node Status?
node history
Node Type: note [id://201522]
help
Chatterbox?
and the web crawler heard nothing...

How do I use this? | Other CB clients
Other Users?
Others examining the Monastery: (12)
As of 2014-08-28 07:13 GMT
Sections?
Information?
Find Nodes?
Leftovers?
    Voting Booth?

    The best computer themed movie is:











    Results (257 votes), past polls