in reply to Re^2: Replace only unescaped metachars
in thread Replace only unescaped metachars

Yes, I knew it had limitations which are hard to fix in an s/// approach.

The recognition of escaped escapes is a naturally recursive problem. Regular expressions, even Perl's, are notoriously bad at that. Your remark about wanting a parser is spot on.

Anno

Replies are listed 'Best First'.
Re^4: Replace only unescaped metachars
by ikegami (Patriarch) on Feb 22, 2007 at 18:53 UTC
    There's no recursion here (which is why the OP's parser is really just a tokeniser). The problem is capturing repeatedly, and knowing which rule (regexp piece) captured a given capture.
      The recursion I vaguely had in mind was
      my $escape; $escape = qr/(?<!(??{ $escape}))\\/;
      It fails, of course, because it would require variable-length lookbehind.

      Anno

        Parsers can't do lookbehind, not to mention recursive lookbehind. You're straying way off your point (that this is a parser problem, not a regexp problem) by saying variable-length lookbehind is required.

        Besides, you said "The recognition of escaped escapes is a naturally recursive problem." There's nothing recursive about "Count the number of slashes leading up to the char. If the count is odd, the character is escaped. If the count is even, the character is not escaped."