开发者

preg_replace() in PHP - Replacing n-occurrences of a character with n-occurrences of another, when following a new line

I'm looking to replace all occurrences of space characters that follow a new line (or occur at the beginning of the input string). I know that I can achieve this using preg_replace_callback() with a callback that uses str_repeat and strlen, or similarly with the /e switch; but was wondering if it could be done more simply.

Currently I have the following:

$testData = "  Hello\n to everybody\n   in the world";
echo preg_replace('/^|\n( )+/', ' ', $pValue开发者_如何学运维);

which gives:

"   Hello to everybody in the world" 

What I'm really after is:

"  Hello\n to everybody\n   in the world" 


I should have searched harder before asking: found the answer (for a java solution) that seems to work perfectly. I'll leave the solution here for the sake of anybody else that has the same problem.

$testData = "  Hello\n to everybody\n   in the world"; 
echo preg_replace('/(?m)(?:^|\\G) /', ' ', $pValue); 

Now just need to identify whether older versions of PHP support this.


You can use recursion

$pValue = "  Hello\n to everybody\n   in the world";
echo myReplace($pValue);

function myReplace($value)
{
    $value = preg_replace('/(^|\\n)(( )*) /', '\1\2 ', $value);
    if (preg_match('/(^|\\n)(( )*) /', $value))
    {
        $value = myReplace($value);
    }
    return $value;
}
0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜