develooper Front page | perl.perl5.porters | Postings from May 2015

[perl #124256] Regex loop for \K in lookbehind

Thread Previous | Thread Next
From:
Tony Cook via RT
Date:
May 27, 2015 05:04
Subject:
[perl #124256] Regex loop for \K in lookbehind
Message ID:
rt-4.0.18-17279-1432703039-1851.124256-15-0@perl.org
On Tue Apr 28 14:27:34 2015, demerphq wrote:
> On 28 April 2015 at 22:28, Karl Williamson <public@khwilliamson.com> wrote:
> > I haven't ever looked at the \K code; I was hoping someone else would look
> > at this.
> 
> Ok, then I will try to find time to address this.

What's the intended behaviour of \K in a look-(ahead|behind)?

My first thught was that it should be ignored, something like:

--- a/regcomp.c
+++ b/regcomp.c
@@ -11787,15 +11787,23 @@ S_regatom(pTHX_ RExC_state_t *pRExC_state, I32 *flagp,
            *flagp |= SIMPLE;
            goto finish_meta_pat;
        case 'K':
-           RExC_seen_zerolen++;
-           ret = reg_node(pRExC_state, KEEPS);
-           *flagp |= SIMPLE;
-           /* XXX:dmq : disabling in-place substitution seems to
-            * be necessary here to avoid cases of memory corruption, as
-            * with: C<$_="x" x 80; s/x\K/y/> -- rgs
-            */
-            RExC_seen |= REG_LOOKBEHIND_SEEN;
-           goto finish_meta_pat;
+            if (!RExC_in_lookbehind) {
+                RExC_seen_zerolen++;
+                ret = reg_node(pRExC_state, KEEPS);
+                *flagp |= SIMPLE;
+                /* XXX:dmq : disabling in-place substitution seems to
+                 * be necessary here to avoid cases of memory corruption, as
+                 * with: C<$_="x" x 80; s/x\K/y/> -- rgs
+                 */
+                RExC_seen |= REG_LOOKBEHIND_SEEN;
+                goto finish_meta_pat;
+            }
+            else {
+                ++RExC_parse;
+                if (PASS2)
+                    ckWARNreg(RExC_parse, "\\K useless in lookbehind");
+                goto tryagain;
+            }

(with some extra code needed to handle look-aheads.)

Or should it control the region matched, so \K in the example would set $& to "a",
as it does now?

Tony

---
via perlbug:  queue: perl5 status: open
https://rt.perl.org/Ticket/Display.html?id=124256

Thread Previous | Thread Next


nntp.perl.org: Perl Programming lists via nntp and http.
Comments to Ask Bjørn Hansen at ask@perl.org | Group listing | About