2009-10-31 13 views
6

Estoy buscando crear una función php que pueda recortar cada línea en una cadena larga.php cómo recortar cada línea en un heredoc (cadena larga)

por ejemplo:

<?php 
$txt = <<< HD 
    This is text. 
      This is text. 
    This is text. 
HD; 

echo trimHereDoc($txt); 

de salida:

This is text. 
This is text. 
This is text. 

Sí, sé acerca de la función trim(). Simplemente no estoy seguro de cómo usarlo en cadenas largas como heredoc.

+0

gracias por todas las soluciones. Necesito aprender más expresión regular. – Yada

Respuesta

23
function trimHereDoc($t) 
{ 
return implode("\n", array_map('trim', explode("\n", $t))); 
} 
+1

+1 por la solución más genérica. (pero no me gustan las líneas compactas) – erenon

+0

Tenga en cuenta que esto también eliminará cualquier carácter devuelto (\ r) que pueda emparejarse con las líneas nuevas (\ n). El archivo fuente puede escribirse con terminaciones de línea de DOS o Apple, pero las líneas recortadas resultantes tendrán terminaciones de línea Unix. Puede establecer los finales de línea que desea en última instancia en el primer parámetro de la declaración de explosión(). – Jason

+1

Y si trata de recortar nuevas líneas de la cadena, simplemente omita el argumento "\ n" en la función de implosión: return implode (array_map ('trim', explotar ("\ n", $ t))); – dval

5

solución simple

<?php 
$txtArray = explode("\n", $txt); 
$txtArray = array_map('trim', $txtArray); 
$txt = implode("\n", $txtArray); 
+1

+1 porque teníamos la misma idea – gpilotino

9
function trimHereDoc($txt) 
{ 
    return preg_replace('/^\s+|\s+$/m', '', $txt); 
} 

^\s+ coincide con espacios en blanco al comienzo de una línea y \s+$ coincide con espacios en blanco al final de una línea. La bandera m dice que hacer reemplazo de varias líneas para que ^ y $ coincidan en cualquier línea de una cadena de varias líneas.

+0

nice RE. Necesito guardar fragmentos de esto. – Yada

+1

Esta función es incorrecta ya que también eliminará las líneas vacías de forma caótica. La forma correcta es usar "/^[\ t \ f] + | [\ t \ f] + $/m" para el patrón. – WASD42

2
function trimHereDoc($txt) 
{ 
    return preg_replace('/^\h+|\h+$/m', '', $txt); 
} 

Mientras \s+ elimina las líneas vacías, mantiene \h+ cada uno líneas vacías

Cuestiones relacionadas