On Fri, Oct 15, 2010 at 11:07 AM, Richard Quadling <rquadling@xxxxxxxxx> wrote: > On 15 October 2010 15:45, Andrew Ballard <aballard@xxxxxxxxx> wrote: >> 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 >> > > Already provided an example using that : http://news.php.net/php.general/308728 > > It was the 'e' modifier I couldn't get to work, though I suppose, as > the code is eval'd, I should have been able to do it. > > The callback just seems a LOT easier. > Sorry - I missed the callback function in there. The loop threw me off because I thought that was part of the solution rather than a test container. Andrew -- PHP General Mailing List (http://www.php.net/) To unsubscribe, visit: http://www.php.net/unsub.php