web-dev-qa-db-fra.com

Supprimer le terme uniquement s'il se trouve sur sa propre ligne

J'ai ceci:

$text = '
   hello world
    
    hello
';

Comment supprimer  niquement s'il est sur sa propre ligne? Donc, avec l'exemple ci-dessus, le deuxième   Devrait être supprimé. Les résultats doivent être:

$text = '
   hello world

    hello
';

Ce que j'ai essayé jusqu'à présent

Via str_replace(), je peux:

$text = str_replace(' ', '', $text);

Mais cela supprimera toutes les instances de  , Pas seulement quand il est sur sa propre ligne.

15
Henrik Petterson

Vous pouvez diviser en lignes puis remplacer   pour la chaîne vide sur les lignes contenant uniquement un   et des espaces.

Nous conserverons les fins de ligne d'origine, en les capturant.

<?php

$text = '
   hello&nbsp;world
   &nbsp;
   &nbsp;hello
';
$lines = preg_split('@(\R)@', $text, -1, PREG_SPLIT_DELIM_CAPTURE);
foreach($lines as &$v)
    if (trim($v) === '&nbsp;')
        $v = str_replace('&nbsp;', '', $v);

$result = implode($lines);
var_dump($result);

Production:

string(40) "
   hello&nbsp;world

   &nbsp;hello
"
0
Progrock