954,525 Members — Technology Publication meets Social Media
Username:
Password:
Lost login information?
Have something to say? Contribute New Article Reply to this Article

Regular expression doesn't make sense

Hi, I'm studying for my CIW perl exam, I've come across this question in my exam software, but it doesn't make sense, and my solution is different to the solution given.

Here is the question:

The following RE matches what patterns?
/[[^TMC]ow/

Not Mow
Mow at the beginning of a string
Not Cow
Cow at the beginning of a string
Tow at the beginning of a string
Not Tow


The given solution is 'Not Mow,Not Cow,Not Tow', but when I run it, I get all of them as matches... Its the extra [ that I don't understand, can anyone explain whats going on. :rolleyes:

Thanks very much, I am very grateful for your help

cms271828
Junior Poster
123 posts since Oct 2006
Reputation Points: 20
Solved Threads: 4
 

Not sure where you got that regexp from but it's either a typographical error or just wrong. The first '[' is doing nothing unless it's literally part of the search pattern. It's also not tied to the beginning of the string. The '^' is the beginning of string anchor but not when it is inside of a character class: []. When it's inside the character class it means to not match what's in the character class (a negated character class). Maybe it was supposed to be:

/^[^TMC]ow/

in which case it means to match a string that begins with any character followed by 'ow' but not if the character is T or M or C:

my @strings = ('Cows say moo', 'I Mow the grass', 'Tow the line', 'Bow tie', 'Pow wow', '9ow begins with a digit', ' ow begins with a space');

for (@strings) {
   /^[^TMC]ow/ && print "$_\n";
}


prints:

Bow tie
Pow wow
9ow begins with a digit
 ow begins with a space
KevinADC
Posting Shark
921 posts since Mar 2006
Reputation Points: 246
Solved Threads: 67
 

This article has been dead for over three months

Post: Markdown Syntax: Formatting Help
You