Как вы обрезаете пробелы в начале и конце каждой новой строки с помощью PHP или регулярного выражения

Как вы обрезаете пробелы в начале и конце каждой новой строки с помощью PHP или регулярного выражения?

Например,

$text = "similique sunt in culpa qui officia 

     deserunt mollitia animi, id est 

  laborum et dolorum fuga   

";

Должно быть,

$text = "similique sunt in culpa qui officia

deserunt mollitia animi, id est

laborum et dolorum fuga
";

person laukok    schedule 07.09.2011    source источник


Ответы (6)


Использование регулярного выражения, безусловно, быстрее для этой задачи. Но если вам нравятся вложенные функции, это также будет trim пробелом во всех строках:

$text = join("\n", array_map("trim", explode("\n", $text)));
person mario    schedule 07.09.2011
comment
Регулярное выражение быстрее? Я протестировал свое регулярное выражение (/[ \t]+$/m) против вашего подхода (только с PHP_EOL вместо \n), и оно примерно в 5 раз медленнее (22,4 мс против 4,3 мс для 1000 итераций по строке ~ 900 символов). И это регулярное выражение уже в два раза быстрее, чем другие здесь, поскольку оно удаляет только конечные пробелы. - person Dennis98; 07.04.2017

<textarea style="width:600px;height:400px;">
<?php

$text = "similique sunt in culpa qui officia 

     deserunt mollitia animi, id est 

  laborum et dolorum fuga   

";

echo preg_replace("/(^\s+|\s+$)/m","\r\n",$text);

?>
</textarea>

Я добавил тестовую область, чтобы вы могли четко видеть новые строки

person Billy Moon    schedule 07.09.2011
comment
спасибо, но у меня проблема с этим регулярным выражением с другим регулярным выражением, когда у меня есть несколько разрывов строк - $text = preg_replace("/(\r\n){3,}/","\r\n\r\n",trim($text)); - stackoverflow.com/questions/7328404/ - person laukok; 07.09.2011
comment
с вашим регулярным выражением я больше не могу обрезать несколько разрывов строк... как так? - person laukok; 07.09.2011
comment
Я думаю, что мое регулярное выражение работает только с образцом, который вы дали, разрывы строк теряются в моем методе, а затем заменяются. Вам лучше использовать решение @mario - оно более надежное и, вероятно, более эффективное. - person Billy Moon; 07.09.2011

1-е решение:

Разделите исходную строку символом новой строки с помощью explode, используйте обрезать каждый токен, а затем восстановить исходную строку...

2-е решение:

Замените это регулярное выражение \s*\n\s* на \n с прег_заменить.

person LaGrandMere    schedule 07.09.2011

Вы можете использовать переключатель любой горизонтальный пробел и функцию preg_replace, чтобы заменить их на ничего такого:

$text = trim(preg_replace('/(^\h+|\h+$)/mu', '', $text));

Если вам нужно сохранить пробелы в файле, удалите trim или замените на функцию ltrim.

person OzzyCzech    schedule 06.01.2015

Вот еще одно регулярное выражение, которое обрезает пробелы в начале конца каждой строки.

$text = preg_replace('/^[\t ]+|[\t ]+$/m', '', $text);

См. /m модификатор

person Pille    schedule 12.04.2015

Решение Марио работает хорошо (спасибо за это Марио - спас мой день). Может быть, кто-нибудь может объяснить, почему мои более поздние проверки на кросс-платформенные совместимые разрывы строк, такие как

    (strstr($text, PHP_EOL))

в FALSE, даже если существуют разрывы строк.

В любом случае, изменение "\n" на PHP_EOL устранило проблему:

    $text = join(PHP_EOL, array_map("trim", explode(PHP_EOL, $text)));
person user2534610    schedule 29.06.2013