If I have a list, I'm likely to want to present it comma separated for the most part, but with the word "and" between the last two elements.
"Cambridge, the M11, the M25, the M4, the A361 and Melksham" for example.
Lists or arrays can be joined in almost any language with a function called join or implode, and a parameter will allow you to specify that comma. But what about the "and"? A regular expression looking for a comma and replacing it with an "and" would just replace the FIRST comma. Solution - use a greedy "match anything" element at the start of the regular expression, thus matching the last comma. You can refer to $1 or \1 in your replacement string.
Want to see an example of that in use? Here is the algorithm coded in Tcl
set codez {SWI CPM MKM TRO WSB DMH WAR SAL}
puts $codez
set togo [join $codez ", "]
regsub {(.*),} $togo {\1 and} togo
puts $togo
And here is how it runs
Dorothy:mt2 grahamellis$ tclsh fbl
SWI CPM MKM TRO WSB DMH WAR SAL
SWI, CPM, MKM, TRO, WSB, DMH, WAR and SAL
Dorothy:mt2
Example written as a demonstration for delegates on the
Tcl and Expect course I am running at the moment.
(written 2008-04-04)
Associated topics are indexed under
G996 - Well House Consultants - Newsletter Scripts [3179] Oops - I typed ci not vi, and have lost my file ... - (2011-02-21)
[2539] Changing Images - (2009-12-17)
[2433] Controlling, supressing, enabling PHP error messages - (2009-10-02)
[2360] Error Handling in Lua with assert and pcall - (2009-08-13)
[2259] Grouping rows for a summary report - MySQL and PHP - (2009-06-27)
[2145] Using the internet to remotely check for power failure at home (PHP) - (2009-04-29)
[2046] Finding variations on a surname - (2009-02-17)
[1954] mod_rewrite for newcomers - (2008-12-20)
[1813] Ajax - going Asyncronous and what it means - (2008-09-28)
[1743] First class functions in Lua lead to powerful OO facilities - (2008-08-07)
[1665] Factory method example - Perl - (2008-06-04)
[1505] Script to present commonly used images - PHP - (2008-01-13)
[1487] Efficient PHP applications - framework and example - (2007-12-28)
[1387] Error logging to file not browser in PHP - (2007-10-11)
[1321] Resetting session based tests in PHP - (2007-08-26)
[1217] What are factory and singleton classes? - (2007-06-04)
[1123] mysqldump and mysqlrestore - (2007-03-30)
[1066] Final, Finally and Finalize - three special words in Java - (2007-02-05)
[1001] .pdf files - upload via PHP, store in MySQL, retrieve - (2006-12-19)
Q803 - Object Orientation and General technical topics - Regular Expressions - Extra Elements [3650] Possessive Regular Expression Matching - Perl, Objective C and some other languages - (2012-03-12)
[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)
[2909] Be gentle rather than macho ... regular expression techniques - (2010-08-08)
[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)
[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)
T205 - Tcl/Tk - String Handling in Tcl [3576] Tcl - apparently odd behaviour of string trimleft - (2012-01-13)
[3285] Extracting data from a string / line from file - Tcl - (2011-05-10)
[3192] Tcl - Some example of HOW TO in handling data files and formats - (2011-03-04)
[2472] split and join in tcl and expect - (2009-10-23)
[1410] Tcl / regsub - changing a string and using interesting bits - (2007-10-27)
[1403] Square Bracket protection in Tcl - (2007-10-23)
[779] The fragility of pancakes - and better structures - (2006-06-26)
[404] How to check that a string contains a number in Tcl - (2005-08-06)
T206 - Tcl/Tk - Lists [3618] lists and struct::list in Tcl - Introduction to struct::list and examples - (2012-02-18)
[3583] Expanding a list of parameters in Tcl - {*} and eval - (2012-01-17)
[3582] Tcl collections - lists, dicts and array - (2012-01-16)
[3415] User defined sorting and other uses of callbacks in Tcl and Tk - (2011-09-02)
[3394] The difference between lists and strings - Tcl - (2011-08-16)
[2468] What are Tcl lists? - (2009-10-22)
[1405] Sorting in Tcl - lists and arrays - (2007-10-24)
[1402] Tcl - append v lappend v concat - (2007-10-23)
[1334] Stable sorting - Tcl, Perl and others - (2007-09-06)
[1283] Generating traffic for network testing - (2007-07-29)
[1282] Stringing together Tcl scripts - (2007-07-29)
[781] Tcl - lappend v concat - (2006-06-27)
[463] Splitting the difference - (2005-10-13)
[144] Tcl sandwich - lists in Tcl - (2004-12-08)
3611
Some other Articles
Learning and understanding scripting programming techniquesM25 / South Mimms Service AreaDo not SHOUT and do not whisperAutomating processes through ExpectReplacing the last comma with an andCambidge - Tcl, Expect and Perl coursesFresher tutor, better courseEvery link has two ends - fixing 404s at the recipientComparing hotels - as a guest and from the proprietors viewSelling curry to the chinese takeaway