Be gentle rather than macho ... regular expression techniques

Please don't be "macho" with your regular expressions.
You can write a very long and complex pattern to match something like a postcode or email address, but if you do, it's be hard to test, difficult to debug, and awkard to maintain. And to add insult to injury, it will probably run slower that the alternative approach.
"What alternative approach?" I hear you asking.
Softly, softly.
Just as you would (manuall) look at an email address quickly and say "does it have an @ symbol in the middle", do the same thing with an easier regular expression that a full, detailed match. Capture the bit before the @ (the user name) into one variable, and the bit after the @ (the domain name) into another. And
only then check each of them to see if they match (a much simpler) pattern.
From last week's Python course - an example
[full source]:
eare = re.compile(r"^\s*(\S+)@(\S+)\s*$")
emmas_bits = eare.findall(emma)
domain_els = emmas_bits[0][1].split(".")
The first line breaks the email address down into two chunks which it stores in the
emmas_bits collection. Then the
split separates the elements of the domain name at the "
." characters. Much easier to read and write than trying to do it all in one!
(written 2010-08-08)
Associated topics are indexed under
Q803 - Object Orientation and General technical topics - Regular Expressions - Extra Elements [3516] Regular Expression modifiers in PHP - summary table - (2011-11-12)
[3100] Looking ahead and behind in Regular Expressions - double matching - (2010-12-23)
[3089] Python regular expressions - repeating, splitting, lookahead and lookbehind - (2010-12-17)
[1860] Seven new intermediate Perl examples - (2008-10-30)
[1735] Finding words and work boundaries (MySQL, Perl, PHP) - (2008-08-03)
[1613] Regular expression for 6 digits OR 25 digits - (2008-04-16)
[1601] Replacing the last comma with an and - (2008-04-04)
[1372] A taster PHP expression ... - (2007-09-30)
[1336] Ignore case in Regular Expression - (2007-09-08)
[943] Matching within multiline strings, and ignoring case in regular expressions - (2006-11-25)
Q805 - Object Orientation and General technical topics - Advanced Regular Expression Components [728] Looking ahead and behind in a Regular Expression - (2006-05-22)
Some other Articles
Six languages in one file - an HTML++ web pagePredictions for the seagull populationFeeding the GrocklesRobust - testing the systemBe gentle rather than macho ... regular expression techniquesHow Green is my train?Dartmouth, Kingswear and TorbaySwitching from Adobe Photoshop to Gimp - testing it on animalsDefining static methods in PythonMelksham Area Board meeting of last week