On Fri, Oct 15, 2010 at 5:52 AM, Richard Quadling <rquadling@xxxxxxxxx> wrote: > On 15 October 2010 10:16, Ford, Mike <M.Ford@xxxxxxxxxxxxxx> wrote: >>> -----Original Message----- >>> From: Andre Polykanine [mailto:andre@xxxxxxxx] >>> Sent: 14 October 2010 21:42 >>> >>> Hi everyone, >>> I hope you're doing well (haven't written here for a long time :-)). >>> The question is as follows: I have a regexp that would do the >>> following. If the string begins with "Re:", it will change the >>> beginning to "Re[2]:"; if it doesn't, then it would add "Re:" at the >>> beginning. But (attention, here it is!) if the string starts with >>> something like "Re[4]:", it should replace it by "Re[5]:". >>> Here's the code: >>> >>> $start=mb_strtolower(mb_substr($f['Subject'], 0, 3)); >>> if ($start=="re:") { >>> $subject=preg_replace("/^re:(.+?)$/usi", "re[2]:$1", $f['Subject']); >>> } elseif ($start=="re[") { >>> // Here $1+1 doesn't work, it returns "Re[4+1]:"! >>> $subject=preg_replace("/^re\[(\d+)\]:(.+?)$/usi", "re[$1+1]:$2", >>> $f['Subject']); >>> } else { >>> $subject="Re: ".$f['Subject']; >>> } >>> >>> I know there actually exists a way to do the numeral addition >>> ("Re[5]:", not "Re[4+1]:"). >>> How do I manage to do this? >> >> This looks like a job for the "e" modifier (see http://php.net/manual/en/reference.pcre.pattern.modifiers.php, and example #4 at http://php.net/preg_replace). Something like: >> >> Â$subject = preg_replace("/^re\[(\d+)\:](.+?)$/eusi", "'re['.(\\1+1).']:\\2'", $f['Subject']); >> >> Cheers! >> >> Mike > > Watch out for the missing '[1]'. This needs to become '[2]' and not '[1]'. > > The callback seems to be the only way I could get the regex to work. > How about preg_replace_callback()? Andrew -- PHP General Mailing List (http://www.php.net/) To unsubscribe, visit: http://www.php.net/unsub.php