Beefy Boxes and Bandwidth Generously Provided by pair Networks
"be consistent"
 
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 learning in the Monastery: (7)
As of 2024-04-18 14:46 GMT
Sections?
Information?
Find Nodes?
Leftovers?
    Voting Booth?

    No recent polls found