2012-05-18 10 views
6

Chciałbym usunąć nadmierne puste linie z ciągu, ale zezwalam na jeden pusty wiersz między każdą linią. Jak:Usuń puste linie ze stringów, ale pozwól jednej pustej między każdą linią

line1 





line2 

powinien stać:

line1 

line2 

znalazłem następujące regex (zapomniałem gdzie znalazłem go):

preg_replace('/^\n+|^[\t\s]*\n+/m','',$message); 

To działa, ale usuwa wszystkie puste linie bez wychodzenia pusta linia między każdą linią.

Edit: Właśnie stworzyliśmy szybki przykład na http://jsfiddle.net/RAqSS/

+0

Czy chodziło Ci o: "Czy stać: line1 \ n \ n line2"? –

+0

Zasadniczo, jeśli między każdą linią jest więcej niż 2 puste linie, należy je przyciąć do jednego. Zasadniczo pozostała pusta linia powinna być równa 1 em. – Sempiterna

+0

Myślę, że musisz zdefiniować, co masz na myśli przez "pustą linię". To, co opisujesz w pytaniu, nie jest pustą linią. –

Odpowiedz

6

spróbować wymienić:

\n(\s*\n){2,} 

z:

\n\n 

Jak to:

preg_replace('/\n(\s*\n){2,}/', "\n\n", $message); // Quotes are important here. 

Jeśli nie chcesz pusty wiersz, by zmienić {2,} Do + i użyj pojedynczego \n. To faktycznie działa z + zamiast {2,}. {2,} jest optymalizacją.

+0

Tak, to działa dokładnie tak, jak chciałem. Dziękuję bardzo! :) – Sempiterna

+1

Ten działa dokładnie!Jeśli nie chcesz używać pustej linii, użyj następującego kodu: 'preg_replace ('/ \ n (\ s * \ n) + /'," \ n ", $ output);' – Devner

4

Spróbuj wykonać następujące czynności:

preg_replace('/\n(\s*\n)+/', "\n\n", $message); 

ten zastąpi przełamane następnie dowolną liczbę pustych linii z jednym nowej linii.

+0

To nie działa. W jakiś sposób usuwa całą zawartość, pozostawiając pusty ciąg. – Sempiterna

+0

'' \ n'' nie jest pojedynczym znakiem nowej linii. –

+0

@KendallFrey - Dzięki, pierwotnie OP pytał o 'line \ nline2', ale wygląda na to, że interpretowałeś go poprawnie w oparciu o jsfiddle. –

0

Na podstawie jsFiddle, spróbuj tego:

$result = preg_replace('/\n(\n*\s)+/', "\n\n", $message); 
+0

Twój drugi kod prawie działa . Zastępuje wszystkie puste linie i zastępuje je pustą linią między każdym fragmentem tekstu. Ale dodaje także pustą linię między każdym fragmentem tekstu, który nie ma wielu pustych wierszy. – Sempiterna

+0

Czy możesz zaktualizować swoje pytanie za pomocą bardziej szczegółowego przykładu danych i oczekiwanych wyników? – sudoash