Page 1 of 1

preg_match exclude characters???

Posted: Fri May 12, 2006 11:33 am
by peterro
Howdy All:

I am trying to write a regular expression to basically process dvd titles. For example if I have

The Great Mouse Detectives I would like to display Great Mouse Detectives, The

I have a function that does almost what I need but when there is a special character i.e( .,!@#$%...) it breaks.

A.I. Artificial Intelligence => .I. Artificial Intelligence, A

Is there a way that I can get preg_match to exclude a set of characters after it matches the ‘A’?

preg_match("/\b$needle\b/i", strtolower($haystack))

$needle is ‘a’ or ‘an’ or ‘the’ and $haystack is the original title.

Any help would be awesome!!!

Posted: Fri May 12, 2006 11:56 am
by Burrito
Moved to Regex

Artificial Intelligence?

Posted: Fri May 12, 2006 12:01 pm
by tr0gd0rr
Simple Solution might be

Code: Select all

preg_match("/^(a|an|the) /i", strtolower($haystack))
which would match "A Tale of Two Cities" but not "A.I. Artificial Intelligence".


but you can also do a negative lookahead, which is what you are asking:

Code: Select all

preg_match("/^(a|an|the)(?!$exclude)/i", strtolower($haystack))
where $exclude is a character or character class to exclude. If $exclude = "\.", the regex will match "A Tale of Two Cities" but not "A.I. Artificial Intelligence".