2016-12-18 22 views
0

ich leer Zitat Zeilen am Ende einer E-Mail entfernen möge:regex - entfernen Leerzeilen am Ende

> Hello 
> 
> thats quotet> 
> 
> 

zu

> Hello 
> 
> thats quotet> 

Aber die regex preg_replace("/^>\W*$/m", "", $input_lines) wird nicht den Trick weil es auch die> der leeren Zeile entfernt, die nicht am Ende ist.

edit: Und es immer noch das Problem, dass nur> am Anfang einer Zeile

entfernt werden sollte
+0

Ich bin sicher, es kann ohne regex erfolgen. –

+0

Vielleicht Trimm-Funktion verwenden. Ich hoffe es hilft – Artur

Antwort

2

Sie verwenden können:

$result = preg_replace('~^(?:^>\h*\R?)*+\z~m', '', $input_lines); 

Um nutzlos Tests zu vermeiden Sie können auch diese mehr versuchen Hand-driven Muster:

$result = preg_replace('~^(?:^>\h*\R?)*+(*SKIP)\z~m', '', $input_lines); 
+0

Was ist der Sinn des '+'? Und was ist der Sinn der "handbetriebenen" Methode? Es wird natürlich nicht mit dem SKIP arbeiten, ist das ein Platzhalter für etwas? – Asara

+0

@Asara: ein zusätzliches '+' nach einem Quantifizierer ('?', '*', '+' Oder '{1,5}') macht diese letzte * possessive *. Dies bedeutet, dass der Quantor keine Zeichen mehr zurückgeben kann, wenn der Backtracking-Mechanismus auftritt. '(* SKIP)' ist kein Platzhalter, es ist ein Backtracking *. Wenn das Zurückverfolgen auftritt (wenn '\ z' in unserem Fall fehlschlägt), versucht die Regex-Engine nicht alle Positionen vor dem' (* SKIP) 'zu wiederholen und startet erst nach * neue Versuche (dies verhindert, dass nutzlose Positionen umsonst getestet werden)) *. –

+0

@Asara: Es funktioniert mit einem ohne die '(* SKIP)', können Sie hier testen: https://regex101.com/r/ikp58Q/1 –

3

Verwenden rtrim, entfernt es angegebene Zeichen von der rechten Seite des Strings. Wir wollen ">" und neue Zeilenzeichen vom Ende entfernen.

-Code:

echo rtrim($input, ">".PHP_EOL); 

Ergebnis:

> Hello 
> 
> thats quotet 
+1

Die Verwendung von 'PHP_EOL' garantiert nicht, dass die Zeichenfolge die gleiche Newline-Sequenz wie PHP verwendet. –

+0

Da ich die Zeilenumbrüche bereits vereinheitlicht habe, kann ich diese Lösung verwenden und bevorzuge sie wegen ihrer Einfachheit. Aber vielleicht können Sie es mit dem Problem Casimir referenzierte – Asara

+0

gibt es noch ein Problem (Ich habe die Frage bereits aktualisiert): Wenn es ein> am Ende der letzten Zeile ist, muss es nicht entfernt werden – Asara

Verwandte Themen