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

Re: Re: Re: multi-line regex match quest

by kelan (Deacon)
on Sep 29, 2002 at 15:15 UTC ( [id://201554]=note: print w/replies, xml ) Need Help??

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

(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++


Yak it up with Fullscreen ChatBox

Replies are listed 'Best First'.
Re^4: multi-line regex match quest
by kelan (Deacon) on Sep 29, 2002 at 16:37 UTC
    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.


    Yak it up with Fullscreen ChatBox

Log In?

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

How do I use this?Last hourOther CB clients
Other Users?
Others taking refuge in the Monastery: (7)
As of 2024-05-20 19:13 GMT
Find Nodes?
    Voting Booth?

    No recent polls found