in reply to japhy has met his match

As fuel for the fire, here's a regex that does match against itself, and only a small number of other cases besides itself. I know it doesn't satisify the "only itself" bit, but it could help get others thinking in the right direction:

#Note that even with single quotes, '\\' is #interpolated to '\'; this doesn't break the regex, #as both sides of =~ will see only '\'. $regex = '^[24\\\\\[\]\{\}\^\$]{24}$'; $text = '2' x 24; # will also match, for example.

Dr. Michael K. Neylon - mneylon-pm@masemware.com || "You've left the lens cap of your mind on again, Pinky" - The Brain

Replies are listed 'Best First'.
Re: Re: japhy has met his match
by japhy (Canon) on May 25, 2001 at 19:33 UTC
    That's the type of approach I took. I try to beef it up, then, by using (?<=...) to require that the text used in the regex so far MUST be there. Oh, and if were to find a regex, it can't use $ -- it must use \z, since $ can match before a newline at the end of a string.

    japhy -- Perl and Regex Hacker
      Replacing $ with \z is trival:
      $regex = '^[z26\\\\\[\]\{\}\^\$]{26}\z';
      I've also worked out what the 'meta match' is for this expression (that is, $re2 below will only match $regex):
      $re2 = '^\^\\[z26\\\\\\\\\\\\\[\\\\\]\\\\\{\\\\\}\\\\\^\\\\\$\\]\\{26\ +\}\\\\z\z';
      So, the idea is your want, in the regex, to have $re2 attempt to match $regex, then have $regex left around that basically is a large character class with a {n} modifier (Thus, if we need to add any new characters like '(', ')', or '?', we work with $regex to add them, modify $re2 above, and we're set).

      However, I can't figure out how to do this part. I'm still thinking about it, but this is a rather interesting problem.


      Dr. Michael K. Neylon - mneylon-pm@masemware.com || "You've left the lens cap of your mind on again, Pinky" - The Brain