On 15 October 2010 15:45, Andrew Ballard <aball...@gmail.com> wrote:
> On Fri, Oct 15, 2010 at 5:52 AM, Richard Quadling <rquadl...@gmail.com> wrote:
>> On 15 October 2010 10:16, Ford, Mike <m.f...@leedsmet.ac.uk> wrote:
>>>> -----Original Message-----
>>>> From: Andre Polykanine [mailto:an...@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

--
PHP General Mailing List (http://www.php.net/)
To unsubscribe, visit: http://www.php.net/unsub.php

Reply via email to