2009-05-03 78 views
11

我正在開發一個single serving site的PHP,它只顯示訪問者發佈的消息(理想情況下圍繞網站主題)。任何人都可以每小時發佈三條消息。使用正則表達式刪除冗餘換行符

由於該網站將只有一個頁面,我想控制每個消息的垂直長度。但是,我確實希望至少部分保留原始郵件中的換行符。妥協是允許兩個換行符,但是如果有兩個以上的換行符,則用連續的總共兩個換行符替換它們。堆棧溢出實現了這一點。

例如:

「豪豬\鼻孔\ n \ n \ n \ nporcupiney」。

將改爲

「豪豬<登記/>是< BR /> < BR /> porcupiney」。

檢查換行符的一個棘手方面是它們被收集並存儲爲\ r \ n,\ r或\ n的可能性。我想過使用nl2br()將所有換行轉換爲<,但這似乎沒有必要。我的問題是:如何在PHP中使用正則表達式(函數preg_match()和preg_replace()),如何檢查一行中兩個以上換行符的實例(在它們之間是否有空格)和然後將它們改爲總共兩個換行符?

回答

30
preg_replace('/(?:(?:\r\n|\r|\n)\s*){2}/s', "\n\n", $text) 
+0

謝謝chaos!這完全符合要求。您的原始回覆也起作用。 – tevan 2009-05-03 02:26:15

+0

原始回覆沒有達到您的「有或無空白空間」標準。 :) – chaos 2009-05-03 05:19:17

+0

但是當只有一個換行符時,它會將其更改爲兩個?它不應該像現在這樣留下一個休息嗎? – NonCoder 2015-05-15 00:09:22

6

喜歡的東西

preg_replace('/(\r|\n|\r\n){2,}/', '<br/><br/>', $text); 

應該工作,我想。雖然我完全不記得PHP語法,但它可能需要更多轉義: -/

+0

謝謝David。我發現您發佈的正則表達式的唯一問題是它不能在換行符之間容納空格。 – tevan 2009-05-03 02:53:33

+0

啊,真的......我錯過了你提到空格之間的空白部分。 – 2009-05-03 03:21:01