无法删除字符串中的所有换行符 - 最后一行仍然存在

时间:2014-12-09 11:34:36

标签: php regex newline

我从来没有在这里发帖,因为我总是在其他帖子中找到答案......但这次没有任何作用,我不知道我做错了什么。

我需要将var_dump变量转换为字符串。我在php手册中找到了ob_start()ob_get_clean()来实现这一目标。

对于text-logfile / debugging需求,我希望清除所有\ n,\ r,多个空格等。

我对SO的搜索为我带来了像

这样的解决方案
$r = preg_replace( '/\s+/', ' ', trim($r));
//or
$r = trim(preg_replace( '/\s+/', ' ', $r));
//I even tried this:
$r = trim(preg_replace( '/\s+/', ' ', trim($r)));

但是我可以摆脱最后一个没有这些解决方案的换行符。

这里是函数的代码:

function var_dump_to_string ($v,$style='normal') {
    ob_start();//use buffering to catch direct output from var_dump()
    var_dump($v);
    $r=ob_get_clean();
    if($style=='flat')//just a flat string with no \r\n nor extra whitespaces
        $r = trim(preg_replace( '/\s+/', ' ', trim($r))); 
    return $r;
}

我的课本中还有一个不受欢迎的换行符。我试着var_dump这个函数的结果,确实有一个新行... 我错过了什么?

编辑:(工作)功能现在看起来像这样,感谢@vks和@anubhava答案:

function var_dump_to_string ($v,$style='normal') {
    $r = var_export($v, true);
    if($style=='flat')  $r = preg_replace('/\s+|\s$/', ' ', $r);
    return $r;
}

4 个答案:

答案 0 :(得分:1)

\s$

试试这个。empty string

\s+|\s$

答案 1 :(得分:1)

使用var_export函数来获取字符串中变量定义的返回值:

$ret = var_export($v, true);

// code to replace newline etc:
$ret = preg_replace('/\s+$/', '', $ret);

答案 2 :(得分:1)

试试这个

$r = trim(preg_replace( '/(\r)?\n(\s*)?(\r)?\n/', ' ', trim($r)));

答案 3 :(得分:0)

解决方案1: preg_replace("/\r\n|\r|\n/", ' ', $r)

代码:

function var_dump_to_string($v, $style='normal'){
    ob_start(); //use buffering to catch direct output from var_dump()
    var_dump($v);
    $r=ob_get_clean();
    if($style=='flat')//just a flat string with no \r\n nor extra whitespaces
        $r = trim(preg_replace("/\r\n|\r|\n/", ' ', $r)); 
    return $r;
}

解决方案2: str_replace(PHP_EOL, '', $r)

代码:

function var_dump_to_string($v, $style='normal'){
    ob_start(); //use buffering to catch direct output from var_dump()
    var_dump($v);
    $r=ob_get_clean();
    if($style=='flat')//just a flat string with no \r\n nor extra whitespaces
        $r = trim(str_replace(PHP_EOL, ' ', $r)); 
    return $r;
}

“PHP_EOL”包括所有“行尾”字符。此解决方案是替换“行尾”字符的最佳方法。