Re: I need help understanding a match

[email protected] (ToddAndMargo via perl6-users) Sun, 12 Jan 2025 01:36:34 -0800
Newsgroups perl.perl6.users
Message-ID <[email protected]>
On 1/12/25 12:59 AM, William Michels via perl6-users wrote:
> ~$ /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 <perl6- 
>> [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'
>>
> 


Thank you!  Now to create a keeper out of it!
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.