web-dev-qa-db-fra.com

Supprimer les nouvelles lignes de la chaîne et les remplacer par un espace vide

$string = "
put returns between paragraphs

for linebreak add 2 spaces at end

";

Voulez-vous supprimer toutes les nouvelles lignes de la chaîne.

J'ai cette expression régulière, elle peut toutes les intercepter, le problème est que je ne sais pas avec quelle fonction dois-je l'utiliser.

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

$string devrait devenir:

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

Vous devez faire attention aux doubles sauts de ligne, ce qui provoquerait des doubles espaces. Utilisez cette expression régulière vraiment efficace:

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

Plusieurs espaces et nouvelles lignes sont remplacés par un seul espace.

Edit: Comme d'autres l'ont déjà souligné, cette solution pose des problèmes de correspondance de nouvelles lignes entre les mots. Ce n'est pas présent dans l'exemple, mais on peut facilement voir comment cette situation pourrait se produire. Une alternative consiste à effectuer les opérations suivantes:

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

Quelques commentaires sur la réponse acceptée:

Le + signifie "1 ou plus". Je ne pense pas que vous ayez besoin de répéter \s. Je pense que vous pouvez simplement écrire '/\s+/'.

De même, si vous souhaitez supprimer les espaces en premier et dernier de la chaîne, ajoutez trim.

Avec ces modifications, le code serait:

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

Il suffit d'utiliser preg_replace()

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

Vous pourriez vous en sortir avec str_replace() sur celui-ci, bien que le code ne soit pas aussi net:

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

Voir en direct sur ideone

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

Vous devriez utiliser str_replace pour sa vitesse et utiliser des guillemets doubles avec un tableau

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

Les remplacements de regex PCRE peuvent être effectués à l'aide de preg_replace: http://php.net/manual/fr/function.preg-replace.php

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

Remplacerait une nouvelle ligne ou renverrait des caractères avec un espace Si vous ne voulez rien remplacer pour les remplacer, changez le 2ème argument en ''.

6
n00dle

Utilisez ceci:

remplace la série de nouvelles lignes par une chaîne vide:

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

ou vous voulez probablement remplacer les nouvelles lignes par un seul espace:

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

La séquence d'échappement \R correspond à une nouvelle ligne générique

c'est-à-dire que tout ce qui est considéré comme une séquence de linebreak par Unicode. Cela inclut tous les caractères correspondant à \v (espaces blancs verticaux), ainsi que la séquence de plusieurs caractères \x0D\x0A...

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

En mode 8 bits non-UTF-8, le code \R équivaut à ce qui suit: (?>\r\n|\n|\x0b|\f|\r|\x85)... pcre.org

Démo Regex101

4
Anton

peut-être que cela fonctionne:

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

Je ne suis pas sûr que cela ait une valeur par rapport aux réponses déjà soumises, mais je peux tout aussi bien le poster.

// 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

De quoi s'agit-il:

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

Cela devrait être une solution assez robuste car\n ne fonctionne pas correctement sur tous les systèmes si je ne me trompe pas ...

2
Johannes Grandy

Vous pouvez essayer ci-dessous, le code préservera les espaces et les nouvelles lignes de votre texte.

$str = "
put returns between paragraphs

for linebreak add 2 spaces at end

";

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

Celui-ci supprime également les onglets

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

Les sauts de ligne dans le texte sont généralement représentés par:

\r\n - sur un ordinateur Windows

\r - sur un ordinateur Apple

\n - sur Linux

//Removes all 3 types of line breaks

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

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

c'est le motif que j'utiliserais

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

ce code ci-dessous fonctionne tout le texte s'il vous plaît utilisez le:

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

Beaucoup de ces solutions n'ont pas fonctionné pour moi. Cela a cependant fait l'affaire: -

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

Voici la référence: - PCRE et New Lines

0
Adam Whateverson

J'ai été surpris de voir à quel point tout le monde sait à propos de regex.

Strip newlines en php est

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

En Perl

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

Signification: remplacez tout caractère de nouvelle ligne à la fin de la ligne (pour des raisons d'efficacité) - éventuellement précédé d'un retour chariot - par un espace.

\ n ou\015 est une nouvelle ligne .\r ou\012 est un retour chariot .? dans regex signifie match 1 ou zéro du caractère précédent . $ dans regex signifie match en fin de ligne.

Perldoc perlre est la référence de regex la plus originale. Tous les développeurs devraient bien connaître ce document: http://perldoc.Perl.org/perlre.html Notez que toutes les fonctionnalités ne sont pas prises en charge par tous. langues.

0
ekerner

Vous pouvez supprimer une nouvelle ligne et plusieurs espaces blancs.

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

echo $name;
0
Ramesh