in reply to Re^6: Regex::Reverse tricky test cases
in thread Regex::Reverse tricky test cases

In addition to showing me that I need to renumber my backreferences properly, I still get no match with the generated regex, qr/(.*)((?=\d+))(A)\2/, because you can't swap a lookaround for a real match.

First, I think you want (.*?), not (.*).

Second, the biggest problem with reversing against the string is the need to have the parsing be ( 4, 321, 'A' ), not ('', 4321, 'A' ) as will have to happen with the \d+. The issue is you need to know what the stuff in \2 is before you match ((?=\d+)).

Also, positive-lookahead is not the direct reversal of negative-lookbehind. For one thing, it's a zero-width assertion that will fail as written because you can't have numbers and letters in the same position. I think it's better reversed as qr/(.*?)\2(A)((?=\d+))/, which makes no sense because \2 isn't populated when it needs to be.

(Incidentally, your suggested pattern is illegal, because the lookbehind is variable-length.)

Yes, it is. But, that's one of the main considerations you gave for wanting to have a regex reverser ...


  • In general, if you think something isn't in Perl, try it out, because it usually is. :-)
  • "What is the sound of Perl? Is it not the sound of a wall that people have stopped banging their heads against?"

Replies are listed 'Best First'.
Re^8: Regex::Reverse tricky test cases
by Roy Johnson (Monsignor) on May 17, 2005 at 15:17 UTC
    I think I would reverse it as qr/(.*?)(\d+)(A)(?=\2)/. But I'm not at all sure how to make a rule I could apply to a YAPE::Regex tree.

    Caution: Contents may have been coded under pressure.
      I don't know about the YAPE::Regex tree, but the rule seems to be: If you have a negative lookbehind and a backreference to it, it stays in the same position, but becomes a positive lookahead on the backreference to its mirror'ed element.

      • In general, if you think something isn't in Perl, try it out, because it usually is. :-)
      • "What is the sound of Perl? Is it not the sound of a wall that people have stopped banging their heads against?"