in reply to Matching Character Patterns With Backreferences

The problem is that [^\1] is interpreted as [^\001] and \001 means ascii charachter 1 in octal format.

A correct regex would be: (using look-aheads):

m/^ # Match the start of the line (\w) # Match the first letter, capture it in $1 (or \1 if you +re-use it in the regex) ( # Open capturing group for $2 (?!\1) # Look ahead and verify that the next charachter isn't +the same as the first one \w # Capture a word-charachter (because of the look ahead +this can't be the same one as the first) ) # Close capture $2 \2 # Match the second charachter another time (no need to ca +pture this) ( # Open capture $3 (?! # Open look-ahead \1 # Charachter 1 | # Or (don't use a charachter class, else you run in +the same trouble as before) \2 # Charachter 2 ) # Close look-ahed \w # Match a word-charachter ) # Close capture $3 ... /x;

I'm sure you see the pattern in this so I'm not going to go on explenaning.

The complete regex would be (tested against LOOKED and SEEMED):
m/^ (\w) ((?!\1)\w)\2 ((?!\1|\2)\w) ((?!\1|\2|\3)\w) ((?!\1|\2|\3|\4)\w) \s$/x
x-modifier is used to make the groups a little bit more visible

Replies are listed 'Best First'.
Re^2: Matching Character Patterns With Backreferences
by Anonymous Monk on Dec 05, 2004 at 23:49 UTC
    Beautiful, thank you fellow Anonymous Monk. I wish the behaviour of \1 inside a character class was better documented. Does anyone know of a good listing of all these kinds of gotchas?

      You might try perldoc perltrap which is a pretty good centralized source of 'gotchas' to avoid.