2011-06-03 75 views
2

我一直在試圖找出一個小時。我只需要一個簡單的解決方法,我可以從中學習。 如何從下面的示例中刪除\ n的多次出現,並僅替換\ n的一次出現?謝謝preg_replace刪除多個 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 
+0

不匹配 「[\ n] +」,並替換它「\ n」工作? – PeterT 2011-06-03 14:31:03

+0

PeterT我剛試過你的方法,但現在沒有任何返回。 idk爲什麼。 – Dylan 2011-06-03 14:32:51

+0

你用什麼代碼來替換。 PeterT有這個AFAIK的正確的正則表達式 – 2011-06-03 14:33:41

回答

3

2種方式

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

而且

preg_replace("/\n+/","\n",$string); 
+0

在我的框架中,我目前使用hte的第一個版本,因爲當我寫了6年前,不太瞭解正則表達式XD(我也是kiddish) – dynamic 2011-06-03 15:35:23

1

如果這是真實的回車符,你可以做到這一點,以去除連續回車:

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

其他的字符串'\ n'你可以做

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

最後,如果你想刪除你的\之間的所有空間ň也可以做

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

爲了讓linebreak工作,你需要用雙引號括起來至少被替換的部分,IE'「\ n」'。 – 2011-06-03 14:39:42

+0

是的,你的回答很快 – malko 2011-06-03 14:42:48

+0

單引號正則表達式中的\ n是正確的(更可取的是讓PCRE解釋轉義序列)。但替換字符串必須由PHP填充正確的字符序列。 – mario 2011-06-03 14:42:49

2

這應該工作:

<?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

不需要[]。 – dynamic 2011-06-03 15:35:43

+0

哦,:)你的顯示沒有,所以它的一切都很好。儘管如此,謝謝你。 – 2011-06-03 16:15:03

1

嘗試迫使+比賽貪,用++代替。

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

你將會遇到的問題是你需要在'\ n'附近用''''來替換'\ n'來返回一個新的行字符 – 2011-06-03 14:46:49

+0

Oh哎呀,對不起,我剛剛從另一個例子中複製了它,但沒有正確的看:P – Lethargy 2011-06-03 14:58:03

0

奇怪的是,沒有代碼的作品? 例子:

$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" 

這意味着該函數...什麼?

+0

但是這裏是解決方案:http://stackoverflow.com/a/816102/343817 – 2012-06-25 08:07:40

0

從疑難雜症的手冊頁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

僅供參考:'\ R'比'array(「\ r \ n」,「\ n」,「\ r」)更緊湊,同樣的意思。 – Toto 2014-02-19 17:47:00

0

嘗試:

$newstr = preg_replace("/\r\n\r\n|\r\r|\n\n/", "..", $str);