我正在寻找替换所有出现在新行之后的空格字符(或出现在输入字符串的开头)。我知道我可以使用带有使用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"
答案 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;
}