2012-05-18 7 views
6

Quisiera eliminar las líneas vacías excesivas de una cadena, pero permitir una línea vacía entre cada línea. Al igual que:Eliminar líneas vacías de la cadena, pero dejar una vacía entre cada línea

line1 





line2 

debe convertirse en:

line1 

line2 

he encontrado la siguiente expresión regular (olvidó donde lo encontré):

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

Esto funciona, pero elimina todas las líneas vacías sin salir una línea vacía entre cada línea.

Editar: Acabo de crear un ejemplo rápido en http://jsfiddle.net/RAqSS/

+0

¿Se refiere a: "deben convertirse en: línea 1 \ n \ n línea 2"? –

+0

Básicamente, si hay más de 2 líneas vacías entre cada línea, se debe recortar a una sola. Entonces, básicamente, esa línea vacía restante debería ser tan alta como 1 em. – Sempiterna

+0

Creo que necesita definir lo que quiere decir con 'línea vacía'. Lo que describes en la pregunta no es una línea vacía. –

Respuesta

6

intente reemplazar:

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

con:

\n\n 

De esta manera:

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

Si no desea que una línea vacía, que cambiaría el {2,} a una + y use un solo \n. Realmente funcionaría con un + en lugar de {2,}. El {2,} es una optimización.

+0

Sí, esto funciona exactamente como yo quería. Muchas gracias! :) – Sempiterna

+1

¡Este funciona precisamente!Si no quiere línea vacía, usaría el siguiente código: 'preg_replace ('/ \ n (\ s * \ n) + /'," \ n ", $ salida);' – Devner

4

Pruebe lo siguiente:

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

Esto reemplazará un salto de línea seguido de cualquier número de líneas en blanco con un solo salto de línea.

+0

Eso no funciona. De alguna manera elimina todo el contenido, dejando una cadena vacía. – Sempiterna

+0

''\ n'' no es una nueva línea. –

+0

@KendallFrey - Gracias, originalmente OP estaba pidiendo 'line \ nline2', pero parece que lo interpretabas correctamente en función del jsfiddle. –

0

Basado en su jsFiddle, intente esto:

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

Su segundo código casi funciona . Reemplaza todas las líneas vacías y las reemplaza con una línea vacía entre cada fragmento de texto. Pero también agrega una línea vacía entre cada fragmento de texto que no tenía múltiples líneas vacías. – Sempiterna

+0

¿Puede actualizar su pregunta con un ejemplo más detallado de sus datos y los resultados esperados? – sudoash

Cuestiones relacionadas