Reputation: 43617
$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
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
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
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
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
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
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
Reputation:
this below code work all text please use it:
$des = str_replace('\n',' ',$des);
$des = str_replace('\r',' ',$des);
Upvotes: 0
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
Upvotes: 13
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
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
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
Reputation: 73
This one also removes tabs
$string = preg_replace('~[\r\n\t]+~', '', $text);
Upvotes: 0
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
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
Reputation: 4839
this is the pattern I would use
$string = preg_replace('@[\s]{2,}@',' ',$string);
Upvotes: 2
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
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
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
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