My current expectations are a little different than any others previously
expressed and I don't know how to get the result. I am no longer
considering named captures from Regex's interpolated inside <angle
brackets> and am now looking at directly interpolating them.
Perl example:
DB<1> *$word = qr/(\w+)/;*
DB<2> *$AwithB = qr/$word with $word/*
DB<3> *$_ = 'Interpolating regexes with arbitrary captures is fun!'*
DB<4> *x /$AwithB.*is $word/*
0 'regexes'
1 'arbitrary'
2 'fun'
That was simple and I like the results of the capture groups being
first-level.
Raku example:
my $word = /(\w+)/;
my $AwithB = /$word' with '$word/;
$_= 'Interpolating regexes with arbitrary captures is fun!';
say "Nested rx";
dd m/$AwithB.*'is '$word/;
say "shallow rx";
dd m/$word' with '$word.*'is '$word/;
say "no interpolation";
dd m/(\w+)' with '(\w+).*'is '(\w+)/;
# code end results below
Nested rx
Match $/ = Match.new(:orig("Interpolating regexes with arbitrary captures
is fun!"), :from(14), :pos(52))
shallow rx
Match $/ = Match.new(:orig("Interpolating regexes with arbitrary captures
is fun!"), :from(14), :pos(52))
no interpolation
Match $/ = Match.new(:orig("Interpolating regexes with arbitrary captures
is fun!"), :from(14), :pos(52), :list((Match.new(:orig("Interpolating
regexes with arbitrary captures is fun!"), :from(14), :pos(21)),
Match.new(:orig("Interpolating regexes with arbitrary captures is fun!"),
:from(27), :pos(36)), Match.new(:orig("Interpolating regexes with arbitrary
captures is fun!"), :from(49), :pos(52)))))
Run against
Welcome to ๐๐๐ค๐ฎ๐๐จโข v2021.02.1.
Implementing the ๐๐๐ค๐ฎโข programming language v6.d.
Built on MoarVM version 2021.02.
What I see from that example code is Raku matching all the regex's as I
expect regardless of nesting them, all without the named capture grouping
angle-brackets. Which is what the documentation suggests from its example-
my $string = 'Is this a regex or a string: 123\w+False$pattern1 ?';
my $regex = /\w+/;
say $string.match: / $regex /; # [4] OUTPUT: ยซ๏ฝขIs๏ฝฃโคยป
Where my expectation differs from the behavior in my example is Raku's
discarding the capture groups of the interpolated regexes. The overall
match works, in all cases :from(14) to :pos(52), but Raku treats the
groupings inside the interpolations as non-capturing.
-y
On Thu, Mar 18, 2021 at 6:08 PM Ralph Mellor <[email protected]>
wrote:
> On Thu, Mar 18, 2021 at 12:59 AM yary <[email protected]> wrote:
> >
> > As it is I get same kinds of errors in the REPL, perhaps it is MacOS
> > with Linenoise that's mucking that up.
>
> I can confirm your new test code also works fine in both program
> and repl forms in 2020.12.
>
> Though obviously the case you mark as "interesting" still doesn't do
> any sub-capturing. Which is to be expected if you know that aspect
> of Raku's regex language.
>
> > I had hoped that by directly interpolating $rd and $rw they would
> > fill in the top-level match object and fill in $0, $1 โ but it has the
> > same issue as Joe's original example.
>
> Are you just saying that your original expectations were the same
> as Joe's, but you now understand that's not how Raku regexes
> work, but it's trivial to get the same result? Or are you saying you
> don't know how to get the same result?
>
> --
> love, raiph
>