Diese Antwort nimmt die Frage komplett wörtlich: Es ist nur mit Leerzeichen und Tabs betroffen. Zugegeben, das OP wahrscheinlich möchte auch andere Arten von Leerzeichen enthalten, was getrimmt/komprimiert wird, aber lassen Sie uns so tun, als ob er die eingebetteten CR und/oder LF beibehalten möchte.
Zuerst, lassen Sie uns einige Konstanten einrichten. Dies ermöglicht eine einfache Verständlichkeit und Wartungsfreundlichkeit, falls Änderungen notwendig werden. Ich platziere einige zusätzliche Leerzeichen, damit Sie die Ähnlichkeiten und Unterschiede leichter vergleichen können.
define('S', '[ \t]+' ); # Stuff you want to compress; in this case ONLY spaces/tabs
define('L', '/\A'.S.'/' ); # stuff on the Left edge will be trimmed
define('M', '/'.S.'/' ); # stuff in the Middle will be compressed
define('R', '/'.S.'\Z/'); # stuff on the Right edge will be trimmed
define('T', ' ' ); # what we want the stuff compressed To
Wir verwenden \A
und \Z
escape characters den Anfang und das Ende des Objekts zu spezifizieren, anstelle der typischen ^
$
und die leitungsorientierten meta-characters sind. Dies ist nicht so sehr, weil sie in diesem Fall so viel wie "defensive" Programmierung benötigt werden, sollte sich der Wert von S
ändern, um sie in der Zukunft benötigt zu machen.
Jetzt für die geheime Zutat: Wir nutzen einige spezielle Semantik von preg_replace, nämlich (Hervorhebung hinzugefügt)
gehen nehmen Wenn es weniger Elemente in der Ersatz-Array als in der sind Muster-Array, werden alle zusätzlichen Muster durch eine leere Zeichenfolge ersetzt.
function trim_press($data){
return preg_replace([ M, L, R ], [ T ], $data);
}
Anstatt also eine Musterzeichenfolge und Ersatz-String, wir sind ein Muster-Array und Ersatz-Array verwendet wird, die in den zusätzlichen Muster ergibt L
und R
getrimmt werden.
Versuchen Sie, * alle * Tabs zu entfernen, oder möchten Sie die Formatierung spalten? – Synetech
Ich denke, du solltest die Antworten neu bewerten und eine andere akzeptieren. – Jeff