$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 ";
preg_replace
. It is almost twice as slow as str_replace
.
s($str)->normalizeLineEndings('')
helpful, as found in this standalone library. It will remove not only LF, CR and CRLF, but also any Unicode newline.
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));
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));
/\s\s+/
would fail to match the linefeed in foo\nbar
.
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
$string = preg_replace("~[\r\n]~", "",$string);
$string = str_replace(array("\n", "\r"), ' ', $string);
\r
characters
You should use str_replace for its speed and using double quotes with an array
str_replace(array("\r\n","\r"),"",$string);
\n
and not \r\n
moreover I think the OP is asking to put a single space in place of new lines
"\n", "\n\r"
to array.
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);
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
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);
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 ''
.
preg
functions use PCRE, not POSIX, regular expressions. There are ereg
functions that use POSIX, but they are now deprecated.
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);
\\n
looks terrible. \\\\
to match a single backslash is just awful.
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 ...
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.
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
this is the pattern I would use
$string = preg_replace('@[\s]{2,}@',' ',$string);
This one also removes tabs
$string = preg_replace('~[\r\n\t]+~', '', $text);
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 );
maybe this works:
$str='\n';
echo str_replace('\n','',$str);
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;
Very simple
$hello = "
A
B
C
";
str_replace("
", " ", $hello);
// A B C
this below code work all text please use it:
$des = str_replace('\n',' ',$des);
$des = str_replace('\r',' ',$des);
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'.
Success story sharing
/(?![ ])\s+/