it-swarm.com.de

Entfernen Sie neue Zeilen aus dem String und ersetzen Sie sie durch ein Leerzeichen

$string = "
put returns between paragraphs

for linebreak add 2 spaces at end

";

Sie möchten alle neuen Zeilen aus dem String entfernen.

Ich habe diesen Regex, er kann sie alle fangen, das Problem ist, ich weiß nicht, mit welcher Funktion ich ihn benutzen soll.

/\r\n|\r|\n/

$string sollte zu:

$string = "put returns between paragraphs for linebreak add 2 spaces at end ";
245
James

Sie müssen auf doppelte Zeilenumbrüche achten, die zu doppelten Leerzeichen führen würden. Verwenden Sie diesen wirklich effizienten regulären Ausdruck:

$string = trim(preg_replace('/\s\s+/', ' ', $string));

Mehrere Leerzeichen und Zeilenumbrüche werden durch ein Leerzeichen ersetzt.

Edit: Wie andere bereits festgestellt haben, gibt es bei dieser Lösung Probleme, die mit einzelnen Zeilenumbrüchen übereinstimmen. Dies ist im Beispiel nicht vorhanden, aber man kann leicht erkennen, wie diese Situation auftreten könnte. Eine Alternative besteht darin, Folgendes zu tun:

$string = trim(preg_replace('/\s+/', ' ', $string));
491
jwueller

Einige Bemerkungen zur akzeptierten Antwort:

Der + bedeutet "1 oder mehr". Ich denke nicht, dass Sie \s wiederholen müssen. Ich denke, Sie können einfach '/\s+/' schreiben.

Wenn Sie Leerzeichen zuerst und zuletzt in der Zeichenfolge entfernen möchten, fügen Sie trim hinzu.

Mit diesen Änderungen würde der Code lauten:

$string = preg_replace('/\s+/', ' ', trim($string));
163
matsolof

Verwenden Sie einfach preg_replace()

$string = preg_replace('~[\r\n]+~', '', $string);

Sie könnten mit str_replace() auf diesem einen durchkommen, obwohl der Code nicht so sauber aussieht:

$string = str_replace(array("\n", "\r"), '', $string);

Sieh es live auf ideone

63
$string = str_replace(array("\n", "\r"), ' ', $string);
19
fabrik

Sie sollten str_replace für seine Geschwindigkeit und doppelte Anführungszeichen für ein Array verwenden

str_replace(array("\r\n","\r"),"",$string);
11
RobertPitt

PCRE-Regex-Ersetzungen können mit preg_replace durchgeführt werden: http://php.net/manual/de/function.preg-replace.php

$new_string = preg_replace("/\r\n|\r|\n/", ' ', $old_string);

Ersetzt eine neue Zeile oder gibt Zeichen mit einem Leerzeichen zurück. Wenn Sie nicht möchten, dass etwas ersetzt wird, ändern Sie das 2. Argument in ''.

6
n00dle

Benutze das:

reihe von Zeilenumbrüchen durch eine leere Zeichenfolge ersetzen:

$string = preg_replace("/[\\n\\r]+/", "", $string);

oder Sie möchten die Zeilenumbrüche wahrscheinlich durch ein Leerzeichen ersetzen:

$string = preg_replace("/[\\n\\r]+/", " ", $string);
5
netom

Escape-Sequenz \R entspricht einem generischen Zeilenvorschub

dies ist alles, was von Unicode als linebreak-Sequenz betrachtet wird. Dies schließt alle Zeichen ein, die mit \v (vertical whitespace) übereinstimmen, und die Mehrzeichenfolge \x0D\x0A...

$string = preg_replace('/\R+/', " ", $string);

Im 8-Bit-Modus, der nicht UTF-8 ist, entspricht \R dem folgenden: (?>\r\n|\n|\x0b|\f|\r|\x85)... pcre.org

Regex101 Demo

4
Anton

vielleicht funktioniert das:

$str='\n';
echo str_replace('\n','',$str);
2
زياد

Ich bin nicht sicher, ob dies einen Wert gegen die bereits eingereichten Antworten hat, aber ich kann es genauso gut posten.

// Create an array with the values you want to replace
$searches = array("\r", "\n", "\r\n");

// Replace the line breaks with a space
str_replace($searches, "", $string);

// Replace multiple spaces with one
$output = preg_replace('!\s+!', ' ', $string);
2
Peter

Was ist mit:

$string = trim( str_replace( PHP_EOL, ' ', $string ) );

Dies sollte eine ziemlich robuste Lösung sein, da\n nicht in allen Systemen korrekt funktioniert, wenn ich mich nicht irre.

2
Johannes Grandy

Sie können unter dem folgenden Code versuchen, Leerzeichen und neue Zeilen in Ihrem Text zu erhalten.

$str = "
put returns between paragraphs

for linebreak add 2 spaces at end

";

echo preg_replace( "/\r|\n/", "", $str );
1
PCMShaper

Dieser entfernt auch Tabs

$string = preg_replace('~[\r\n\t]+~', '', $text);
1
user3213174

Zeilenumbrüche im Text werden im Allgemeinen wie folgt dargestellt:

\r\n - auf einem Windows-Computer

\r - auf einem Apple-Computer

\n - unter Linux

//Removes all 3 types of line breaks

$string = str_replace("\r", "", $string);

$string = str_replace("\n", "", $string);
1

dieses Muster würde ich verwenden

$string = preg_replace('@[\s]{2,}@',' ',$string);
1
Rajeev

der folgende Code funktioniert für den gesamten Text. Bitte benutzen Sie ihn:

$des = str_replace('\n',' ',$des);
$des = str_replace('\r',' ',$des);
0
mehdi

Viele dieser Lösungen haben bei mir nicht funktioniert. Dies hat den Trick gemacht:

$svgxml = preg_replace("/(*BSR_ANYCRLF)\R/",'',$svgxml);

Hier ist die Referenz: - PCRE und New Lines

0

Ich war überrascht zu sehen, wie wenig jeder über Regex weiß.

Zeilenumbrüche in PHP sind

$str = preg_replace('/\r?\n$/', ' ', $str);

In Perl

$str =~ s/\r?\n$/ /g;

Bedeutung Ersetzen Sie alle Zeilenumbrüche am Zeilenende (aus Effizienzgründen) - optional vorangestellt durch einen Wagenrücklauf - durch ein Leerzeichen.

\ n oder\015 ist Newline .\r oder\012 ist Wagenrücklauf .? in regex bedeutet Übereinstimmung mit 1 oder Null des vorherigen Zeichens . $ in regex bedeutet Übereinstimmung mit Zeilenende.

Die ursprüngliche und beste Regex-Referenz ist perldoc perlre. Jeder Kodierer sollte dieses Dokument gut kennen: http://perldoc.Perl.org/perlre.html Hinweis: Nicht alle Funktionen werden von allen unterstützt Sprachen.

0
ekerner

Sie können neue Zeilen und mehrere Leerzeichen entfernen.

$pattern = '~[\r\n\s?]+~';
$name="test1 /
                     test1";
$name = preg_replace( $pattern, "$1 $2",$name);

echo $name;
0
Ramesh