James
James

Reputation: 43617

Remove new lines from string and replace with one empty space

$string = "
put returns between paragraphs

for linebreak add 2 spaces at end

";

Want to remove all new lines from string.

I've this regex, it can catch all of them, the problem is I don't know with which function should I use it.

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

$string should become:

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

Upvotes: 366

Views: 654163

Answers (20)

mickmackusa
mickmackusa

Reputation: 47863

I often prefer \R to isolate newline sequences in regex patterns, but in this case, it is not necessary to keep potential \r-\n pairs coupled together -- they are all going to be consumed anyhow. Just use \v+ to match 1 or more consecutive vertical whitespace characters and replace them with a single space. You may also want to call trim() to clean up any leading or trailing spaces. (Demo)

$string = "
put returns between paragraphs

for linebreak add 2 spaces at end

";

var_export(
    preg_replace('/\v+/', ' ', trim($string))
);

If anyone runs into corrupted multibyte characters, just add the u pattern modifier to set the regex engine in unicode mode (/\v+/u).

Upvotes: 2

Kashif
Kashif

Reputation: 21

Using a combination of solutions mentioned above, this one line worked for me

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

It removes '\r' and '\n'.

Upvotes: 1

Peter
Peter

Reputation: 9113

I'm not sure if this has any value against the already submitted answers but I can just as well post it.

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

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

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

Upvotes: 28

Ramesh
Ramesh

Reputation: 1555

You can remove new line and multiple white spaces.

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

echo $name;

Upvotes: 0

Watts Epherson
Watts Epherson

Reputation: 783

Many of these solutions didn't work for me. This did the trick though:-

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

Here is the reference:- PCRE and New Lines

Upvotes: 5

Md. Al Amin Bhuiyan
Md. Al Amin Bhuiyan

Reputation: 333

Line breaks in text are generally represented as:

\r\n - on a windows computer

\r - on an Apple computer

\n - on Linux

//Removes all 3 types of line breaks

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

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

Upvotes: 10

user8031209
user8031209

Reputation:

this below code work all text please use it:

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

Upvotes: 0

Anton
Anton

Reputation: 169

Escape sequence \R matches a generic newline

that is, anything considered a linebreak sequence by Unicode. This includes all characters matched by \v (vertical whitespace), and the multi character sequence \x0D\x0A...

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

In 8-bit non-UTF-8 mode \R is equivalent to the following: (?>\r\n|\n|\x0b|\f|\r|\x85)... pcre.org

Regex101 Demo

Upvotes: 13

ekerner
ekerner

Reputation: 5840

I was surprised to see how little everyone knows about regex.

Strip newlines in php is

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

In perl

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

Meaning replace any newline character at the end of the line (for efficiency) - optionally preceded by a carriage return - with a space.

\n or \015 is newline. \r or \012 is carriage return. ? in regex means match 1 or zero of the previous character. $ in regex means match end of line.

The original and best regex reference is perldoc perlre, every coder should know this doc pretty well: http://perldoc.perl.org/perlre.html Note not all features are supported by all languages.

Upvotes: 3

PCMShaper
PCMShaper

Reputation: 64

You can try below code will preserve any white-space and new lines in your text.

$str = "
put returns between paragraphs

for linebreak add 2 spaces at end

";

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

Upvotes: 0

GDY
GDY

Reputation: 2941

Whats about:

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

This should be a pretty robust solution because \n doesn't work correctly in all systems if i'm not wrong ...

Upvotes: 4

user3213174
user3213174

Reputation: 73

This one also removes tabs

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

Upvotes: 0

jwueller
jwueller

Reputation: 30996

You have to be cautious of double line breaks, which would cause double spaces. Use this really efficient regular expression:

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

Multiple spaces and newlines are replaced with a single space.

Edit: As others have pointed out, this solution has issues matching single newlines in between words. This is not present in the example, but one can easily see how that situation could occur. An alternative is to do the following:

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

Upvotes: 695

matsolof
matsolof

Reputation: 2715

A few comments on the accepted answer:

The + means "1 or more". I don't think you need to repeat \s. I think you can simply write '/\s+/'.

Also, if you want to remove whitespace first and last in the string, add trim.

With these modifications, the code would be:

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

Upvotes: 212

Rajeev
Rajeev

Reputation: 4839

this is the pattern I would use

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

Upvotes: 2

n00dle
n00dle

Reputation: 6043

PCRE regex replacements can be done using preg_replace: http://php.net/manual/en/function.preg-replace.php

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

Would replace new line or return characters with a space. If you don't want anything to replace them, change the 2nd argument to ''.

Upvotes: 7

NullUserException
NullUserException

Reputation: 85458

Just use preg_replace()

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

You could get away with str_replace() on this one, although the code doesn't look as clean:

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

See it live on ideone

Upvotes: 122

fabrik
fabrik

Reputation: 14365

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

Upvotes: 30

RobertPitt
RobertPitt

Reputation: 57268

You should use str_replace for its speed and using double quotes with an array

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

Upvotes: 16

netom
netom

Reputation: 3362

Use this:

replace series of newlines with an empty string:

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

or you probably want to replace newlines with a single space:

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

Upvotes: 5

Related Questions