Удалить пробелы в конце каждой строчки, до переноса

Рейтинг: 1Ответов: 1Опубликовано: 13.01.2023

https://regex101.com/r/PtkGM1/1

Не выходит, первый пустые строчки удалим, ок. Но как оставить те 2 пробела, в начале первой строчки с текстом?

[\s]+\n

Так я пытаюсь найти все пробелы которые есть перед переносом строчки. Как я понимаю, в данном случаи я удалю так же перенос в конце каждой строчки. Вопрос в том, как не удалять перенос строчки?

$tx = '
  
  
   текст       
    текст       


     текст            
      текст    

  
';



print_r("<div style='display: -webkit-box; white-space: pre-wrap;word-break: break-word;'>".preg_replace('#(^[\s\n]+|[\s\n]+$)#s', null, $tx)."</div>");

Как мне удалить пробелы в конце каждой строчки и при этом сохранить переносы?

Ответы

▲ 1Принят

\s эквивалентно [\r\n\t\f\v ] и уже включает в себя перевод строки.
Когда выполняется замена то ограничитель \n для выбора пробелов так же удаляется.


Попробуйте использовать в выражении только горизонтальные \h пробельные символы и символ конца строки $:

\h+$

Либо использовать позитивный просмотр вперед на перенос строки или конец текста

\h+(?=\n|\Z)

Пример: regex101.com

UPD: Для preg_replace

$reg = '/\h+$/m';
$tx = '
   текст       
    текст       


     текст            
      текст    

  ';
$substr = "";
$result = preg_replace($reg, $substr, $tx);
echo $result;