Re: RegExp question: how to add a number?

From: Date: Fri, 15 Oct 2010 15:07:46 +0000
Subject: Re: RegExp question: how to add a number?
References: 1 2 3 4  Groups: php.general 
Request: Send a blank email to php-general+get-308739@lists.php.net to get a copy of this message
On 15 October 2010 15:45, Andrew Ballard <aballard@gmail.com> wrote: > On Fri, Oct 15, 2010 at 5:52 AM, Richard Quadling <rquadling@gmail.com> wrote: >> On 15 October 2010 10:16, Ford, Mike <M.Ford@leedsmet.ac.uk> wrote: >>>> -----Original Message----- >>>> From: Andre Polykanine [mailto:andre@oire.org] >>>> 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. -- Richard Quadling Twitter : EE : Zend @RQuadling : e-e.com/M_248814.html : bit.ly/9O8vFY

« previous php.general (#308739) next »