Re: I need help understanding a match

[email protected] (William Michels via perl6-users)
Newsgroups perl.perl6.users
Message-ID <[email protected]>
~$ /Users/admin/rakudo/rakudo-2024.09/rakudo-moar-2024.09-01-macos-arm64-clang/bin/raku -e '  \
   my Str $AltClickHere = lines[0];  \
   my @AltArray =
      ($AltClickHere ~~ m:g/
          download        #literal
          .*?             #any-character, one-or-more, frugal
          <?before \>  >  #positive look-ahead, match but dont capture \> angle
          /).map(*.Str);   \
   .put for @AltArray;'  todd_test.txt
download='betterbird-128.6.0esr-bb20.de.linux-x86_64.tar.bz2'
download='betterbird-128.6.0esr-bb20.en-US.linux-x86_64.tar.bz2'
download='betterbird-128.6.0esr-bb20.es-AR.linux-x86_64.tar.bz2'

Hi Todd, 

Well the previous code I sent works with your example, but the code above is better:

1. The first token can be simplified to the literal `download`. You could use `[ ^ | download ]`, which would capture everything from `^` the beginning of the string regardless of whether-or-not the string starts with `download`.

2. The second token, `.*?`,    matches any-character, one-or-more, frugally. 

3. The third (original) token, `<?before \> | \h+ >` could be simplified to either `<?before \> >` or `<?before \h+ >`. It says to find the pattern but stop the match before the literal ">" angle or "\h+" one-or-more horizontal whitespace character.

I hope that helps a bit. Oh yeah, if you want just the quoted download, you could use a positive-lookbehind, `<?after … >`. See below:

~$ /Users/wmichels/rakudo/rakudo-2024.09/rakudo-moar-2024.09-01-macos-arm64-clang/bin/raku -e '  \
   my Str $AltClickHere = lines[0];  \
   my @AltArray =
      ($AltClickHere ~~ m:g/
          <?after download \= >  #positive look-behind, match but dont capture download\=
          .*?                    #any-character, one-or-more, frugal
          <?before \>  >         #positive look-ahead, match but dont capture \> angle 
          /).map(*.Str);   \
   .put for @AltArray;'  todd_test.txt
'betterbird-128.6.0esr-bb20.de.linux-x86_64.tar.bz2'
'betterbird-128.6.0esr-bb20.en-US.linux-x86_64.tar.bz2'
'betterbird-128.6.0esr-bb20.es-AR.linux-x86_64.tar.bz2'

HTH, Bill.

> On Jan 11, 2025, at 19:09, ToddAndMargo via perl6-users <[email protected]> wrote:
> 
> Hi All,
> 
> In another post, Bill gave me a wonderful match that took
> a ridiculously long line of test and cut out what I wanted
> and put it into cells of an array.
> 
> @ClickArray = $ClickPage ~~ m:g/ <?before ^ | download > .*? <?before \> | \h+ > /;
> 
> I do not understand what he did.
> 
> m:g   = match and global
> 
> <>    = litteral
> 
> ?     what does this do?
> ^     what does this do?
> 
> |     what does this do?
> \     what does this do
> 
> \h+ >   what does this do?
> 
> 
> 
> Yours in confusion.
> -T
> 
> 
> In practice:
> 
> 
> [0] > my Str $x=Q{^[[200~download='betterbird-128.6.0esr-bb20.de.linux-x86_64.tar.bz2'>    <div class="img bz2"></div>    <div class="name">        <div class="file fs-1-2 bold">betterbird-128.6.0esr-bb20.de.linux-x86_64.tar.bz2</div> <div class="data upper size fs-0-7"><span class="bold">Size:</span> 80.26<span class="fs-0-8 bold">MB</span></div>        <div class="data upper modified fs-0-7"><span class="bold">Last modified:</span> Tue. January 7th, 2025 - 10:54pm</div>    </div></a></div><div class="block"><a href="LinuxArchive/betterbird-128.6.0esr-bb20.en-US.linux-x86_64.tar.bz2" class="bz2" download='betterbird-128.6.0esr-bb20.en-US.linux-x86_64.tar.bz2'> <div class="img bz2"></div>    <div class="name">        <div class="file fs-1-2 bold">betterbird-128.6.0esr-bb20.en-US.linux-x86_64.tar.bz2</div> <div class="data upper size fs-0-7"><span class="bold">Size:</span> 80.04<span class="fs-0-8 bold">MB</span></div>        <div class="data upper modified fs-0-7"><span class="bold">Last modified:</span> Tue. January 7th, 2025 - 10:42pm</div>    </div>    </a></div><div class="block"><a href="LinuxArchive/betterbird-128.6.0esr-bb20.es-AR.linux-x86_64.tar.bz2" class="bz2" download='betterbird-128.6.0esr-bb20.es-AR.linux-x86_64.tar.bz2'> <div class="img bz2"></div>    <div class="name">        <div class="file fs-1-2 bold">betterbird-128.6.0esr-bb20.es-AR.linux-x86_64.tar.bz2</div>}
> download='betterbird-128.6.0esr-bb20.de.linux-x86_64.tar.bz2'>    <div class="img bz2"></div>    <div class="name">        <div class="file fs-1-2 bold">betterbird-128.6.0esr-bb20.de.linux-x86_64.tar.bz2</div>     <div <class="data upper size fs-0-7"><span class="bold">Size:</span> 80.26<span class="fs-0-8 bold">MB</span></div>        <div class="data upper modified fs-0-7"><span class="bold">Last modified:</span> Tue. January 7th, 2025 - 10:54pm</div> </div></a></div><div class="block"><a href="LinuxArchive/betterbird-128.6.0esr-bb20.en-US.linux-x86_64.tar.bz2" class="bz2" download='betterbird-128.6.0esr-bb20.en-US.linux-x86_64.tar.bz2'> <div class="img bz2"></div>    <div class="name">        <div class="file fs-1-2 bold">betterbird-128.6.0esr-bb20.en-US.linux-x86_64.tar.bz2</div> <div class="data upper size fs-0-7"><span class="bold">Size:</span> 80.04<span class="fs-0-8 bold">MB</span></div>        <div class="data upper modified fs-0-7"><span class="bold">Last modified:</span> Tue. January 7th, 2025 - 10:42pm</div>    </div>    </a></div><div class="block"><a href="LinuxArchive/betterbird-128.6.0esr-bb20.es-AR.linux-x86_64.tar.bz2" class="bz2" download='betterbird-128.6.0esr-bb20.es-AR.linux-x86_64.tar.bz2'> <div class="img bz2"></div>    <div class="name">        <div class="file fs-1-2 bold">betterbird-128.6.0esr-bb20.es-AR.linux-x86_64.tar.bz2</div>
> 
> 
> [1] > my @y = $x ~~ m:g/ <?before ^ | download > .*? <?before \> | \h+ > /;
> 
> [「download='betterbird-128.6.0esr-bb20.de.linux-x86_64.tar.bz2'」 「download='betterbird-128.6.0esr-bb20.en-US.linux-x86_64.tar.bz2'」 「download='betterbird-128.6.0esr-bb20.es-AR.linux-x86_64.tar.bz2'」]
> 
> 
> [2] > for @y -> $Line  { print $Line ~ "\n"; }
> 
> download='betterbird-128.6.0esr-bb20.de.linux-x86_64.tar.bz2'
> download='betterbird-128.6.0esr-bb20.en-US.linux-x86_64.tar.bz2'
> download='betterbird-128.6.0esr-bb20.es-AR.linux-x86_64.tar.bz2'
>
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.