`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