PHP中的preg_replace() - 当跟随一个新行时,用n次出现的另一个字符替换n次出现的字符

时间:2010-11-17 14:28:47

标签: php regex preg-replace

我正在寻找替换所有出现在新行之后的空格字符(或出现在输入字符串的开头)。我知道我可以使用带有使用str_repeat和strlen的回调的preg_replace_callback()来实现这一点,或者类似于/ e开关;但是想知道它是否可以更简单地完成。

目前我有以下内容:

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

给出:

"   Hello to everybody in the world" 

我真正追求的是:

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

2 个答案:

答案 0 :(得分:1)

在问之前我应该​​更加努力地寻找:找到似乎完美的答案(对于java解决方案)。为了其他有同样问题的人,我会在这里留下解决方案。

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

现在只需确定旧版本的PHP是否支持此功能。

答案 1 :(得分:0)

您可以使用递归

$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;
}