Beefy Boxes and Bandwidth Generously Provided by pair Networks
Just another Perl shrine
 
PerlMonks  

Re: Re: multi-line regex match quest

by smackdab (Pilgrim)
on Sep 29, 2002 at 06:04 UTC ( [id://201525]=note: print w/replies, xml ) Need Help??


in reply to Re: multi-line regex match quest
in thread multi-line regex match quest

AWESOME AWESOME AWESOME
thanks thanks thanks
(I only understand it about 50% so far...)

Replies are listed 'Best First'.
Re: Re: Re: multi-line regex match quest
by kelan (Deacon) on Sep 29, 2002 at 15:15 UTC
    (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
Domain Nodelet?
Node Status?
node history
Node Type: note [id://201525]
help
Chatterbox?
and the web crawler heard nothing...

How do I use this?Last hourOther CB clients
Other Users?
Others chilling in the Monastery: (3)
As of 2025-06-13 00:33 GMT
Sections?
Information?
Find Nodes?
Leftovers?
    Voting Booth?

    No recent polls found

    Notices?
    erzuuliAnonymous Monks are no longer allowed to use Super Search, due to an excessive use of this resource by robots.