PHP supports two regular expression handlers - the "ereg" series that uses POSIX style regular expressions, and the "preg" series that uses Perl style. Why? Because both have their uses - the POSIX style makes for easier-to-read expressions and are said to be easier to learn, and the Perl style is more powerful and quicker in operation ... at the price of being harder to learn and follow.
I was updating some code in our Wiki yesterday and needed to search for all words in a string that start with a capital and include an embedded capital, since we use them as links - visit
our shared data system to see what I mean. But then I hit a curious bug - introduced myself - where there were multiple hits. Turned out to be a good reminder that preg_match_all returns an ARRAY of ARRAYs - with each array contained being a list of each of the elements matching the revelant "interesting bits" in the regular expression given. Hmm - that might be clear as mud when I describe it, so here's an example:
<?php
$demo = "SwinDon ChippenHam MelkSham TrowBridge and WestBury";
preg_match_all('/([A-Z][a-z]+)([A-Z][a-z]+)/',$demo, $gotten);
foreach ($gotten as $set) {
foreach ($set as $item) {
print "$item ... ";
}
print ("<br>");
}
?>
You would EXPECT to get five arrays back - one for each of the place names. But actually you get just three - one for the complete names of the places, one for the start of the place name, and one for the end of the place name.
SwinDon ... ChippenHam ... MelkSham ... TrowBridge ... WestBury ...
Swin ... Chippen ... Melk ... Trow ... West ...
Don ... Ham ... Sham ... Bridge ... Bury ...
Once you've come across this for the first time, it's easy enough to handle in your program - but I just felt it was worth a
Beware - counterintauative feature warning here. And there are flag options to the command that let you alter its behaviour if you wish
(written 2005-06-06, updated 2006-06-05)
Associated topics are indexed under
H107 - String Handling in PHP [4072] Splitting the difference with PHP - (2013-04-27)
[4071] Setting up strings in PHP - (2013-04-27)
[3790] Solution looking for a problem? Lookahead and Lookbehind - (2012-06-30)
[3789] More than just matching with a regular expression in PHP - (2012-06-30)
[3788] Getting more than a yes / no answer from a regular expression pattern match - (2012-06-30)
[3534] Learning to program in PHP - Regular Expression and Associative Array examples - (2011-12-01)
[3516] Regular Expression modifiers in PHP - summary table - (2011-11-12)
[3515] PHP - moving from ereg to preg for regular expressions - (2011-11-11)
[3424] Divide 10000 by 17. Do you get 588.235294117647, 588.24 or 588? - Ruby and PHP - (2011-09-08)
[3020] Handling (expanding) tabs in PHP - (2010-10-29)
[2629] Curly braces within double quoted strings in PHP - (2010-02-09)
[2238] Handling nasty characters - Perl, PHP, Python, Tcl, Lua - (2009-06-14)
[2165] Making Regular Expressions easy to read and maintain - (2009-05-10)
[2046] Finding variations on a surname - (2009-02-17)
[1799] Regular Expressions in PHP - (2008-09-16)
[1613] Regular expression for 6 digits OR 25 digits - (2008-04-16)
[1603] Do not SHOUT and do not whisper - (2008-04-06)
[1533] Short and sweet and sticky - PHP form input - (2008-02-06)
[1372] A taster PHP expression ... - (2007-09-30)
[1336] Ignore case in Regular Expression - (2007-09-08)
[1195] Regular Express Primer - (2007-05-20)
[1058] PHP Regular expression to extrtact link and text - (2007-01-31)
[1008] Date conversion - PHP - (2006-12-26)
[728] Looking ahead and behind in a Regular Expression - (2006-05-22)
[716] Evaluating arithmetic expressions in configuration files - (2006-05-10)
[642] How similar are two words - (2006-03-11)
[608] Don't expose your regular expressions - (2006-02-15)
[589] Robust PHP user inputs - (2006-02-03)
[574] PHP - dividing a string up into pieces - (2006-01-23)
[560] The fencepost problem - (2006-01-10)
[558] Converting between acres and hectares - (2006-01-08)
[493] Running a Perl script within a PHP page - (2005-11-12)
[463] Splitting the difference - (2005-10-13)
[422] PHP Magic Quotes - (2005-08-22)
[54] PHP and natural sorting - (2004-09-19)
[31] Here documents - (2004-08-28)
H999 - Additional PHP Material [3210] Catchable fatal error in PHP ... How to catch, and alternative solutions such as JSON - (2011-03-22)
[3118] Arrays of arrays - or 2D arrays. How to program tables. - (2011-01-02)
[2684] Exception handling in PHP - (2010-03-18)
[2215] If nothing, make it nothing. - (2009-06-02)
[2073] Extra PHP Examples - (2009-03-09)
[1623] PHP Techniques - a workshop - (2008-04-26)
[1519] Flipping images on your web page - (2008-01-26)
[1505] Script to present commonly used images - PHP - (2008-01-13)
[1485] Copyright and theft of images, bandwidth and members. - (2007-12-26)
[1451] More PHP sample and demonstration programs - (2007-12-01)
[1391] Ordnance Survey Grid Reference to Latitude / Longitude - (2007-10-14)
[1390] Converting from postal address to latitude / longitude - (2007-10-13)
[1389] Controlling and labelling Google maps via PHP - (2007-10-13)
[1270] PHP Standalone - keyboard to screen - (2007-07-18)
[1194] Drawing hands on a clock face - PHP - (2007-05-19)
[1104] Drawing dynamic graphs in PHP - (2007-03-09)
[1053] Sorting people by name in PHP - (2007-01-26)
[1020] Parallel processing in PHP - (2007-01-03)
[1010] Dates, times, clickable diarys in PHP - (2006-12-28)
[937] Display an image from a MySQL database in a web page via PHP - (2006-11-22)
[917] Syntax checking in PHP - (2006-11-07)
[839] Reporting on the 10 largest files or 10 top scores - (2006-08-20)
[822] PHP - a team member leaves - (2006-08-04)
[806] Check your user is human. Have him retype a word in a graphic - (2006-07-17)
[789] Hot answers in PHP - (2006-07-02)
[687] Presentation, Business and Persistence layers in Perl and PHP - (2006-04-17)
[665] PHP Image viewing application - (2006-04-01)
[603] PHP - setting sort order with an associative array - (2006-02-13)
[563] Merging pictures using PHP and GD - (2006-01-13)
[483] Double Dollars in PHP - (2005-11-02)
[468] Stand alone PHP programs - (2005-10-18)
[372] Time calculation in PHP - (2005-07-08)
[322] More maps - (2005-05-23)
[320] Ordnance Survey - using a 'Get a map' - (2005-05-22)
[239] What and why for the epoch - (2005-03-08)
310a
Some other Articles
Happy Birthday, PHPCode and code maintainance efficiencyPassing information into and out of PHP functionsOO techniques are hard to teachthe array returned by preg_match_allTargetted AdvertisingSad prioritiesSymbolic links and hard linksDo NOT follow links or read attachments in these emailsLooking up IP addresses