I've been using Regex-Coach 0.8.4 on Windows to test some SpamAssassin rules and noticed something odd:
Placing the following expression: [.|m]
to match the following data: bleh.com
Matches the '.' in bleh.com and not the first non-linefeed character as the '.' character in the expression should match. It's almost as if I had excaped the '.' like '.'. Using the expression '[.]' yields the same result. I've also noticed that the non-match character '^' doesn't work inside brackets as well.
Is this an error or am I crazy?
Bryn
On Wed, 26 Apr 2006 12:44:30 -0700, sites@brynmosher.com wrote:
I've been using Regex-Coach 0.8.4 on Windows to test some SpamAssassin rules and noticed something odd:
Placing the following expression: [.|m]
to match the following data: bleh.com
Matches the '.' in bleh.com and not the first non-linefeed character as the '.' character in the expression should match. It's almost as if I had excaped the '.' like '.'. Using the expression '[.]' yields the same result. I've also noticed that the non-match character '^' doesn't work inside brackets as well.
Is this an error or am I crazy?
Well, at least it's not an error... :)
Most characters that have a special meaning in regular expressions (like the dot or the pipe symbol, for example) are treated like normal characters within character classes, i.e. within square brackets.
See 'man perlre' for details.
BTW, it seems that your understanding of character classes as a whole is wrong. If the dot /would/ match every non-linefeed character, then "[.|m]" would be equivalent to "[.]".
Cheers, Edi.