This got me farther in some perl5 regexp experiments, and more questions,
now at
http://blogs.perl.org/users/yary/2019/08/splitting-on-a-change-in-perl6.html

-y


On Sun, Aug 25, 2019 at 12:55 AM William Michels <w...@caa.columbia.edu>
wrote:

> Lookahead/lookbehind assertions: maybe the mnemonic "ABBA" will help?
>
> In Markdown:
>
> 'Use *A*fter for a look-*B*ehind, use *B*efore for a look-*A*head',
> or...
> 'For a look-*A*head' use *B*efore, for a look-*B*ehind" use *A*fter'.
>
>  As a trivial example of the first mnemonic in practice, below are
> examples with html tags. Note the last two examples which differ in
> the use of a 'greedy' (.*) pattern vs the use of a 'frugal' (.*?)
> pattern, still give the same result:
>
> > my $title = '<title>abcdefghijklmnopqrstuvwxyz</title>';
> <title>abcdefghijklmnopqrstuvwxyz</title>
> > $title ~~ /<?after '<title>' > .* <?before '</title>' >/;
> 「abcdefghijklmnopqrstuvwxyz」
> > say ~$/ if $title ~~ /<?after '<title>' > .* <?before '</title>' >/;
> abcdefghijklmnopqrstuvwxyz
> > say ~$/ if $title ~~ /<?after '<title>' > .*? <?before '</title>' >/;
> abcdefghijklmnopqrstuvwxyz
> >
>
> HTH, Bill.
>
> https://docs.perl6.org/language/regexes
>
>
>
> On Fri, Aug 23, 2019 at 2:28 PM Brad Gilbert <b2gi...@gmail.com> wrote:
> >
> > `after` and `before` can be confusing, but I think it would be more
> confusing if it were the other way around.
> >
> > On Fri, Aug 23, 2019 at 2:15 PM Sean McAfee <eef...@gmail.com> wrote:
> >>
> >> On Thu, Aug 22, 2019 at 6:11 PM yary <not....@gmail.com> wrote:
> >>>
> >>> Perl 6 is doing the right thing. The dot matches any character. In
> >>> this case, matching the final ':'. The next bit of the regex says the
> >>> cursor has to be after 1:, and indeed, after matching the ':' the
> >>> cursor is after '1:', so the substitution succeeds.
> >>
> >>
> >> My real use case, that I tried to provide a simplified example of, was
> to process some pretty-printed JSON.  Less simplified this time, I wanted
> to change all "foo": "whatever" strings to "foo": "*".  In Perl 5 I would
> have done:
> >>
> >>     s/(?<="foo": ")[^"]+/*/;
> >>
> >> Trying to express this in Perl 6, I thought "lookbehind" would
> naturally translate to a "before" assertion:
> >>
> >>     s/<?before '"foo": "'><-["]>+/*/;
> >>
> >> ...but that didn't work.  Various other attempts led to the simplified
> example I originally provided.
> >>
> >> Long story short, it seems that a Perl 5 (?<=...) lookbehind translates
> to a Perl 6 <?after ...> assertion, and likewise a Perl 5 (?=...) lookahead
> translates to a Perl 6 <?before ...> assertion.  The terminology just
> confused me due to my prior Perl 5 experience.
> >>
>

Reply via email to