Regular expressions in Perl and PHP include facilities called zero width assertions, zero width lookahead and lookbehinds. A case of jargon that looks almost calculated to confuse?
Zero width assertions are where a regular expression matches some sort of condition in the line, without actually consuming any characters from the incoming string - the three most common examples are ^ (must be at start of string), $ (must be at end of string) and \b (must be at word boundary).
There are times when you may wish to say "if followed by", "if not followed by", "if following" and "if NOT following" in a regular expression match, but to not actually move backward or forward over the incoming string - for example, in a spell checker I was writing yesterday (
source,
read about it and
try it out) I was looking to split my incoming string at each word boundary, but only if NOT following or followed by a single quote. And, crucially, the single quote character was not to be included in the matched string itself - I was just saying "no break here" in the case of words like
hasn't and
I'll. This is a requirement for a zero width negative look behind written
(?<!') and a zero width negative look ahead written
(?!').
Here's the complete regular expression of my example:
$elements = preg_split("/\b(?<!')(?!')/",$page);
Footnote - Zero width positive lookaheads are written (?=xx) and zero width positive look behinds are written (?<=xx), where xx is the expression that you're looking back or forward to match (written 2006-05-22)
Associated topics are indexed as below, or enter http://melksh.am/nnnn for individual articles
Q805 - Object Orientation and General technical topics - Advanced Regular Expression Components [2909] Be gentle rather than macho ... regular expression techniques - (2010-08-08)
[3089] Python regular expressions - repeating, splitting, lookahead and lookbehind - (2010-12-17)
[3100] Looking ahead and behind in Regular Expressions - double matching - (2010-12-23)
[3790] Solution looking for a problem? Lookahead and Lookbehind - (2012-06-30)
H107 - String Handling in PHP [31] Here documents - (2004-08-28)
[54] PHP and natural sorting - (2004-09-19)
[337] the array returned by preg_match_all - (2005-06-06)
[422] PHP Magic Quotes - (2005-08-22)
[463] Splitting the difference - (2005-10-13)
[493] Running a Perl script within a PHP page - (2005-11-12)
[558] Converting between acres and hectares - (2006-01-08)
[560] The fencepost problem - (2006-01-10)
[574] PHP - dividing a string up into pieces - (2006-01-23)
[589] Robust PHP user inputs - (2006-02-03)
[608] Don't expose your regular expressions - (2006-02-15)
[642] How similar are two words - (2006-03-11)
[716] Evaluating arithmetic expressions in configuration files - (2006-05-10)
[1008] Date conversion - PHP - (2006-12-26)
[1058] PHP Regular expression to extrtact link and text - (2007-01-31)
[1195] Regular Express Primer - (2007-05-20)
[1336] Ignore case in Regular Expression - (2007-09-08)
[1372] A taster PHP expression ... - (2007-09-30)
[1533] Short and sweet and sticky - PHP form input - (2008-02-06)
[1603] Do not SHOUT and do not whisper - (2008-04-06)
[1613] Regular expression for 6 digits OR 25 digits - (2008-04-16)
[1799] Regular Expressions in PHP - (2008-09-16)
[2046] Finding variations on a surname - (2009-02-17)
[2165] Making Regular Expressions easy to read and maintain - (2009-05-10)
[2238] Handling nasty characters - Perl, PHP, Python, Tcl, Lua - (2009-06-14)
[2629] Curly braces within double quoted strings in PHP - (2010-02-09)
[3020] Handling (expanding) tabs in PHP - (2010-10-29)
[3424] Divide 10000 by 17. Do you get 588.235294117647, 588.24 or 588? - Ruby and PHP - (2011-09-08)
[3515] PHP - moving from ereg to preg for regular expressions - (2011-11-11)
[3516] Regular Expression modifiers in PHP - summary table - (2011-11-12)
[3534] Learning to program in PHP - Regular Expression and Associative Array examples - (2011-12-01)
[3788] Getting more than a yes / no answer from a regular expression pattern match - (2012-06-30)
[3789] More than just matching with a regular expression in PHP - (2012-06-30)
[4071] Setting up strings in PHP - (2013-04-27)
[4072] Splitting the difference with PHP - (2013-04-27)
Some other Articles
Where is a web site visitor browsing fromHotel Technology RequirementsReading the newspaper and working with other restrictionsCareer development adviceLooking ahead and behind in a Regular ExpressionA journey, an arrival, a peopleIn praise of training course delegates.Better communicationHelping mental health through diet, exercise and other lifestyle mattersViewing images held in a MySQL database via PHP