in reply to Regex::Reverse tricky test cases

Why or how do you want to reverse a regex? as in, when would it be useful?

Also can you give an example of a regex and the xeger? (I really don't see how you want to reverse them... which makes it ofcourse impossible for me, and perhaps otehers too, to come up with a test)

As a side note, but still relevant: the purpose of a back-reference is to say: match X and at a later time in the string match X again. basiclly you could have a string: abcb and a regex m/(b).\1/. Now how can you reverse that? you could try m/\1.(b)/ which obviously makes no sense, since a back reference is only set after a matching-group...

Update: I found some intresting posts on perl.perl5.port (dated end 2001, the sexeger node is dated 2000 so these should be newer). One of the most intresting I seen on this subject is: http://www.nntp.perl.org/group/perl.perl5.porters/47521. I also looked up the full thread (or atleast tried to), links can be found in the readmore.

These are the numbers (the ones between brackets aren't really related to reversing (IMHO)):

Replies are listed 'Best First'.
Re^2: Regex::Reverse tricky test cases
by Roy Johnson (Monsignor) on May 17, 2005 at 13:16 UTC
    See my answer to dragonchild for why. I'm sorry, I thought everybody knew about sexeger, which was probably a pretty foolish assumption. Here are a couple of regexes I've run through my program:
    Before: (?i-msx:a(ab)(cd)\2\1) After: (?i-msx:(ba)(dc)\2\1a) Before: (?-imsx:\d+[abc]def(foo|bar)) After: (?-imsx:(oof|rab)fed[abc]\d+)
    Note that the 2nd is from japhy's seminal work on the subject, and differs from his reversal: alternatives should maintain their order (foo|bar becomes oof|rab, not rab|oof).

    Caution: Contents may have been coded under pressure.
      Ah. I understand now.

      How would you reverse the following: /(?<\d+)(A)\1/


      • 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?"
        Is that supposed to be a variable-length lookbehind (it lacks an =)? Perhaps ironically, I haven't put any handling for lookahead/behind in my program.

        What I would need to do is to convert lookbehinds to lookaheads, and vice-versa. Other than that, the normal reversing would work. Ok, I've done that. Program says:

        Before: (?-imsx:(?<=\d+)(A)\1) After: (?-imsx:(A)\1(?=\d+))

        Caution: Contents may have been coded under pressure.