Re: RegExp question: how to add a number?
| From: | Andrew Ballard | Date: | Fri, 15 Oct 2010 14:45:31 +0000 |
| Subject: | Re: RegExp question: how to add a number? | ||
| References: | 1 2 3 | Groups: | php.general |
| Request: | Send a blank email to php-general+get-308738@lists.php.net to get a copy of this message | ||
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