$string = "
put returns between paragraphs
for linebreak add 2 spaces at end
";
Möchten Sie alle neuen Zeilen aus der Zeichenfolge entfernen.
Ich habe diesen regulären Ausdruck, er kann alle erfassen. Das Problem ist, dass ich nicht weiß, mit welcher Funktion ich ihn verwenden soll.
/\r\n|\r|\n/
$string
soll werden:
$string = "put returns between paragraphs for linebreak add 2 spaces at end ";
preg_replace
. Es ist fast doppelt so langsam wiestr_replace
.s($str)->normalizeLineEndings('')
hilfreiche Informationen in dieser eigenständigen Bibliothek . Es werden nicht nur LF, CR und CRLF entfernt, sondern auch alle Unicode-Zeilenumbrüche.Antworten:
Sie müssen mit doppelten Zeilenumbrüchen vorsichtig sein, die doppelte Leerzeichen verursachen würden. Verwenden Sie diesen wirklich effizienten regulären Ausdruck:
Mehrere Leerzeichen und Zeilenumbrüche werden durch ein einzelnes Leerzeichen ersetzt.
Bearbeiten: Wie andere bereits betont haben, gibt es bei dieser Lösung Probleme beim Abgleichen einzelner Zeilenumbrüche zwischen Wörtern. Dies ist im Beispiel nicht vorhanden, aber man kann leicht sehen, wie diese Situation auftreten könnte. Eine Alternative besteht darin, Folgendes zu tun:
quelle
/(?![ ])\s+/
Einige Kommentare zur akzeptierten Antwort:
Das
+
bedeutet "1 oder mehr". Ich glaube nicht, dass du es wiederholen musst\s
. Ich denke du kannst einfach schreiben'/\s+/'
.Wenn Sie Leerzeichen zuerst und zuletzt in der Zeichenfolge entfernen möchten, fügen Sie hinzu
trim
.Mit diesen Änderungen wäre der Code:
quelle
/\s\s+/
würde nicht mit dem Linefeed übereinstimmenfoo\nbar
.Benutz einfach
preg_replace()
Sie könnten mit
str_replace()
diesem davonkommen , obwohl der Code nicht so sauber aussieht:Sehen Sie es live auf ideone
quelle
$string = preg_replace("~[\r\n]~", "",$string);
quelle
\r
Zeichen nicht entfernt werdenSie sollten str_replace für seine Geschwindigkeit verwenden und doppelte Anführungszeichen mit einem Array verwenden
quelle
\n
und\r\n
ich denke nicht, dass das OP darum bittet, ein neues Leerzeichen anstelle neuer Zeilen zu setzenIch bin mir nicht sicher, ob dies einen Wert gegenüber den bereits eingereichten Antworten hat, aber ich kann es genauso gut posten.
quelle
PCRE-Regex-Ersetzungen können mit preg_replace durchgeführt werden: http://php.net/manual/en/function.preg-replace.php
Würde neue Zeilen ersetzen oder Zeichen durch ein Leerzeichen zurückgeben. Wenn Sie nicht möchten, dass etwas sie ersetzt, ändern Sie das zweite Argument in
''
.quelle
preg
Funktionen verwenden reguläre Ausdrücke von PCRE und nicht von POSIX. Es gibtereg
Funktionen, die POSIX verwenden, aber sie sind jetzt veraltet.Benutze das:
Ersetzen Sie eine Reihe von Zeilenumbrüchen durch eine leere Zeichenfolge:
oder Sie möchten wahrscheinlich Zeilenumbrüche durch ein einzelnes Leerzeichen ersetzen:
quelle
\\n
sieht schrecklich aus.\\\\
einen einzigen Backslash zu finden ist einfach schrecklich.Die Escape-Sequenz
\R
entspricht einer generischen NewlineRegex101 Demo
quelle
Zeilenumbrüche im Text werden im Allgemeinen wie folgt dargestellt:
\ r \ n - auf einem Windows-Computer
\ r - auf einem Apple-Computer
\ n - unter Linux
quelle
Was ist mit:
Dies sollte eine ziemlich robuste Lösung sein, da \ n nicht auf allen Systemen richtig funktioniert, wenn ich mich nicht irre ...
quelle
Ich war überrascht zu sehen, wie wenig jeder über Regex weiß.
Strip Newlines in PHP ist
In Perl
Bedeutung Ersetzen Sie alle Zeilenumbrüche am Ende der Zeile (aus Effizienzgründen) - optional vorangestellt von einem Wagenrücklauf - durch ein Leerzeichen.
\ n oder \ 015 ist Zeilenumbruch. \ r oder \ 012 ist Wagenrücklauf. ? in Regex bedeutet Übereinstimmung 1 oder Null des vorherigen Zeichens. $ in Regex bedeutet, dass das Zeilenende übereinstimmt.
Die ursprüngliche und beste Regex-Referenz ist perldoc perlre. Jeder Codierer sollte dieses Dokument ziemlich gut kennen: http://perldoc.perl.org/perlre.html Beachten Sie, dass nicht alle Funktionen von allen Sprachen unterstützt werden.
quelle
Dies ist das Muster, das ich verwenden würde
quelle
Vielleicht funktioniert das:
quelle
Dieser entfernt auch Tabs
quelle
Sie können versuchen, dass der folgende Code Leerzeichen und neue Zeilen in Ihrem Text beibehält.
quelle
Viele dieser Lösungen haben bei mir nicht funktioniert. Dies hat den Trick gemacht: -
Hier ist die Referenz: - PCRE und New Lines
quelle
Dieser folgende Code funktioniert den gesamten Text. Bitte verwenden Sie ihn:
quelle
Sie können neue Linien und mehrere Leerzeichen entfernen.
quelle