如何用空格替换第一个CR LF和制表

时间:2015-12-08 14:31:14

标签: php str-replace strrchr

enter image description here所以我在下面有这种格式的文字,我需要用空格替换第一个CR LF制表:

Contenu
    2 encarts
    12 encarts

Prepresse
    Fichier fourni

我希望得到结果:

Contenu 2 encarts
        12 encarts

Prepresse Fichier fourni

2 个答案:

答案 0 :(得分:0)

您能否提供有关要格式化的文本来源的更多信息?  好像 Contenu Prepresse Fichier 都是小组的名字

你有 2 encarts 12 encarts fourni 等项目作为这些组中的项目

首先要检测文本是组名还是项目,我希望可以从文本来源查找。 第二件事是正确回应这些项目。

编辑:

我使用数组做了很多,使用以下代码创建了输出:     

$text = "Contenu\n\t2 encarts\n\t12 encarts\n\nPrepresse\n\tFichier fourni";

//divide the groups
$groups = explode("\n\n", $text);

//loop groups
foreach ($groups as $group) {

    //get group name and items
    $items = explode("\n\t", $group);

    //loop items, 
    foreach ($items as $item => $value) {
        switch ($item) {
            case 0: 
                //first item is group name
                echo $value . " ";
                //get the length of this group name to align all items using spaces
                $length = strlen($value) + 1;
                break;
            case 1: //second item is first value, what apears next to the group name
                echo $value . "<br>";
                break;
            default: // other items, where the spaces are the length of the groupname
                echo str_repeat("&nbsp;", $length) . $value . "<br>";
                break;
        }
    }

    //when an entire group is shown, leave an empty space
    echo "<br>";

}

?>

将此显示为输出:

Contenu 2 encarts
        12 encarts

Prepresse Fichier fourni

希望这会有所帮助

答案 1 :(得分:0)

使用regexp可以完成:

<?php
$text = "Contenu\n\t2 encarts\n\t12 encarts\n\nPrepresse\n\tFichier fourni";    
echo $text."\n";    
echo preg_replace('/((^.+)(\n\t))/ime', "str_replace('$3', ' ', '$0')", $text);
?>

输出是:

Contenu
    2 encarts
    12 encarts

Prepresse
    Fichier fourni
Contenu 2 encarts
    12 encarts

Prepresse Fichier fourni