2009-10-31 17 views
6

Sto cercando di creare una funzione php in grado di tagliare ogni riga in una stringa lunga.php come tagliare ogni riga in un heredoc (stringa lunga)

esempio:

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

echo trimHereDoc($txt); 

uscita:

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

Sì, lo so la funzione trim(). Non so come usarlo su stringhe lunghe come heredoc.

+0

grazie per tutte le soluzioni. Ho bisogno di imparare più espressioni regolari. – Yada

risposta

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

+1 perché la soluzione più generica. (ma, non mi piacciono le linee così compatte) – erenon

+0

Ricorda che questo eliminerà anche i caratteri di restituzione (\ r) che possono essere associati alle nuove righe (\ n). Il file sorgente può essere scritto con terminazioni di linea DOS o Apple, ma le linee troncate risultanti avranno tutte terminazioni di linea Unix. Puoi impostare le terminazioni di linea che desideri nel primo parametro dell'istruzione explode(). – Jason

+1

E se stai cercando di tagliare i newline dalla stringa, semplicemente ometti "\ n" arg, nella funzione implode: return implode (array_map ('trim', explode ("\ n", $ t))); – dval

5

Soluzione semplice

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

+1 perché abbiamo avuto la stessa idea – gpilotino

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

^\s+ corrisponde spazi bianchi all'inizio di una riga e \s+$ corrisponde spazi bianchi alla fine di una riga. La bandiera m dice di eseguire la sostituzione multilinea in modo che ^ e $ corrispondano su qualsiasi linea di una stringa a più righe.

+0

nice RE. bisogno di tenere frammenti di questo. – Yada

+1

Questa funzione è in realtà non corretta in quanto rimuoverà anche le linee vuote in modo caotico. Il modo corretto è usare "/^[\ t \ f] + | [\ t \ f] + $/m" per il modello. – WASD42

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

Mentre \s+ rimuove righe vuote, mantiene \h+ ciascuna righe vuote