preg_replace удаляет несколько символов "\ n" - PullRequest
2 голосов
/ 03 июня 2011

Как удалить несколько экземпляров \n из приведенного ниже примера и заменить только одно вхождение \n?

По сути, я просто хочу удалить несколько разрывов строк и заменить их всего одним разрывом строк.

\n\n\n\n\n\n\n\n \n\n \n\n\n\n\n\n\n    \n\n     \n\n     \n\n    \n\n    \n\n     \n\n     \n\n     \n     \n     \n     \n     \n     \n     \n\n     \n\n     \n\n     \nEDITION:  U.S.\n\n \nINTERNATIONAL\n\n     \nMÉXICO\n\n     \n\n     \nSet edition preference\n\n     \n\n     \n\n     \n\n     \nSign up\n\n     \nLog in\n\n     \n\n \n\n     \n\n     \n\n     \n\n\n\n\n\n\n\n\n\n\n\n     \n\n     \n\n\n \n\n \n\n     \n\n     \n\n    \n\n    \n\n     \n\n     \nHome\n\n     \nVideo\n\n     \nNewsPulse\n\n \nU.S.\n\n     \nWorld\n\n     \nPolitics\n\n     \nJustice\n\n     \nEntertainment\n\n     \nTech\n\n     \nHealth\n\n     \nLiving\n\n     \nTravel\n\n \nOpinion\n\n     \niReport\n\n     \nMoney\n\n     \nSports\n\n     \n\n    \n\n\n\n\n\n \n\n\n\n\n\n\n\n \n\n\n\n \n\n\n\n\n\n\n \n\nupdated 10:02 a.m.EDT, Fri June 3, 2011\n\n\n\n\n\n \n\n\n\n\n\nDr. Jack Kevorkian dead at 83\n\n\n\n\n\n\nThe Michigan pathologist who put assisted suicide on the world\'s medical ethics stage, apparently died of a blood clot, according to his attorney. FULL STORY

Ответы [ 7 ]

3 голосов
/ 03 июня 2011

Два пути

while(strpos($string, "\n\n") !== false)
  str_replace("\n\n", "\n", $string);

И

preg_replace("/\n+/", "\n", $string);
2 голосов
/ 03 июня 2011

Это должно работать:

<?php
$string = "\n\n\n\n Text \n\n Text \n\n\n\n\n Text \n\n\n";

echo preg_replace("#[\n]+#", "\n", $string);
1 голос
/ 03 июня 2011

Попытайтесь заставить жадность совпадения +, используя вместо этого ++.

preg_replace('/\n++/', "\n", $yourString);
1 голос
/ 03 июня 2011

Если это реальный возврат каретки, вы можете сделать это для удаления последовательных возвратов каретки:

preg_replace('/\n+/', '\n', $yourString);

Иначе для строки '\ n' вы можете сделать:

preg_replace('/(\\n)+/', '\n', $yourString);

Наконец, если вы хотите удалить все пробелы между \ n, вы также можете сделать "

preg_replace('/\s*\n+/', '\n', $yourString);
0 голосов
/ 26 октября 2015

Попробуйте:

$newstr = preg_replace("/\r\n\r\n|\r\r|\n\n/", "..", $str);
0 голосов
/ 19 февраля 2014

Другой способ из примеров getcha на странице руководства для str_replace ():

// Order of replacement
$str     = "Line 1\nLine 2\rLine 3\r\nLine 4\n";
$order   = array("\r\n", "\n", "\r");
$replace = '<br />';

// Processes \r\n's first so they aren't converted twice.
$newstr = str_replace($order, $replace, $str);
0 голосов
/ 25 июня 2012

Странно, ни один код не работает?Пример:

$barcodes = "5312353123123



5312353123123



5312353123123";
echo(     var_dump(   $barcodes     )     . '</br>' . "\n"  );
$barcodes = preg_replace('/\n+/', "\n", $barcodes);
exit(  var_dump(   $barcodes     )     . '</br>' . "\n"  );

Вывод:

string(55) "5312353123123 5312353123123 5312353123123"
string(55) "5312353123123 5312353123123 5312353123123"

Это означает, что функция не выполняет ... ничего?

...