2012-05-18 11 views
6

Vorrei rimuovere le righe vuote eccessive da una stringa, ma consentire una linea vuota tra ogni linea. Come:Rimuovere le righe vuote dalla stringa, ma consentire una vuota tra ogni riga

line1 





line2 

dovrebbe diventare:

line1 

line2 

ho trovato la seguente espressione regolare (dimenticato dove ho trovato):

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

Questo funziona, ma rimuove tutte le righe vuote senza lasciare una linea vuota tra ogni linea.

Edit: ho appena creato un esempio veloce a http://jsfiddle.net/RAqSS/

+0

Forse intendevi: "Dovrebbe diventare: line1 \ n \ n line2"? –

+0

Fondamentalmente se ci sono più di 2 linee vuote tra ogni linea, dovrebbe essere ridotta a una sola. Quindi, in sostanza, quella riga vuota rimanente dovrebbe essere alta come 1 em. – Sempiterna

+0

Penso che sia necessario definire cosa intendi per 'linea vuota'. Quello che descrivi nella domanda non è una linea vuota. –

risposta

6

provare a sostituire:

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

con:

\n\n 

Ti piace questa:

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

Se non si desidera una riga vuota, si cambierebbe il {2,} ad un + e utilizzare un singolo \n. Funzionerebbe in effetti con + anziché {2,}. Il {2,} è un'ottimizzazione.

+0

Sì, funziona esattamente come volevo. Grazie mille! :) – Sempiterna

+1

Questo funziona esattamente!Se non vuoi la riga vuota, dovresti usare il seguente codice: 'preg_replace ('/ \ n (\ s * \ n) + /'," \ n ", $ output);' – Devner

4

Prova il seguente:

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

Questo sostituirà un ritorno a capo seguito da un qualsiasi numero di righe vuote con una sola riga.

+0

Che non funziona. Rimuove in qualche modo tutto il contenuto, lasciando una stringa vuota. – Sempiterna

+0

''\ n'' non è una singola nuova riga. –

+0

@KendallFrey - Grazie, in origine l'OP chiedeva 'line \ nline2' ma sembra che tu stia interpretando correttamente basato su jsfiddle. –

0

Sulla base della sua jsFiddle, provate questo:

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

Il tuo secondo codice funziona quasi . Sostituisce tutte le linee vuote e le sostituisce con una linea vuota tra ogni parte del testo. Ma aggiunge anche una linea vuota tra ogni pezzo di testo che non ha più righe vuote. – Sempiterna

+0

È possibile aggiornare la domanda con un esempio più dettagliato dei dati e dei risultati previsti? – sudoash

Problemi correlati