$string = "
put returns between paragraphs
for linebreak add 2 spaces at end
";
想从字符串中删除所有新行。
我有这个正则表达式,它可以捕获所有这些,问题是我不知道我应该使用哪个函数。
/\r\n|\r|\n/
$string
应该成为:
$string = "put returns between paragraphs for linebreak add 2 spaces at end ";
答案 0 :(得分:514)
你必须小心双线换行,这会导致双倍空格。使用这个非常有效的正则表达式:
$string = trim(preg_replace('/\s\s+/', ' ', $string));
多个空格和换行符将替换为单个空格。
编辑:正如其他人所指出的那样,此解决方案在单词之间存在匹配单个换行符的问题。这在示例中不存在,但可以很容易地看出这种情况是如何发生的。另一种方法是执行以下操作:
$string = trim(preg_replace('/\s+/', ' ', $string));
答案 1 :(得分:167)
对接受的答案的一些评论:
+
表示“1或更多”。我认为你不需要重复\s
。我想你可以简单地写'/\s+/'
。
另外,如果要在字符串中首先删除空白,请先添加trim
。
通过这些修改,代码将是:
$string = preg_replace('/\s+/', ' ', trim($string));
答案 2 :(得分:67)
只需使用preg_replace()
$string = preg_replace('~[\r\n]+~', '', $string);
虽然代码看起来不干净,但你可以在这个问题上取消str_replace()
:
$string = str_replace(array("\n", "\r"), '', $string);
上查看
答案 3 :(得分:19)
$string = str_replace(array("\n", "\r"), ' ', $string);
答案 4 :(得分:11)
你应该使用str_replace来提高它的速度,并使用带数组的双引号
str_replace(array("\r\n","\r"),"",$string);
答案 5 :(得分:6)
PCRE正则表达式替换可以使用preg_replace完成: http://php.net/manual/en/function.preg-replace.php
$new_string = preg_replace("/\r\n|\r|\n/", ' ', $old_string);
将用空格替换换行或返回字符。如果您不想要任何替换它们,请将第二个参数更改为''
。
答案 6 :(得分:5)
使用此:
用空字符串替换一系列换行符:
$string = preg_replace("/[\\n\\r]+/", "", $string);
或者您可能希望用一个空格替换换行符:
$string = preg_replace("/[\\n\\r]+/", " ", $string);
答案 7 :(得分:4)
Escape sequence \R
匹配通用换行符
即,任何被Unicode视为换行符序列的内容。这包括与
\v
(垂直空白)匹配的所有字符,以及多字符序列\x0D\x0A
......
$string = preg_replace('/\R+/', " ", $string);
在8位非UTF-8模式下,
\R
等效于以下内容:(?>\r\n|\n|\x0b|\f|\r|\x85)
... pcre.org
答案 8 :(得分:3)
文本中的换行符通常表示为:
\ r \ n -在Windows计算机上
\ r -在Apple计算机上
\ n -在Linux上
foreach
答案 9 :(得分:3)
关于:
$string = trim( str_replace( PHP_EOL, ' ', $string ) );
这应该是一个非常强大的解决方案,因为如果我没有错,\ n在所有系统中都无法正常工作......
答案 10 :(得分:2)
我不确定这对已提交的答案是否有任何价值,但我也可以发布。
// 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);
答案 11 :(得分:2)
也许这有效:
$str='\n';
echo str_replace('\n','',$str);
答案 12 :(得分:1)
您可以尝试使用下面的代码来保留文本中的任何空格和新行。
$str = "
put returns between paragraphs
for linebreak add 2 spaces at end
";
echo preg_replace( "/\r|\n/", "", $str );
答案 13 :(得分:1)
我很惊讶地看到每个人都对正则表达式知之甚少。
在php中删除换行符
$str = preg_replace('/\r?\n$/', ' ', $str);
在perl
$str =~ s/\r?\n$/ /g;
含义替换行末尾的任何换行符(为了提高效率) - 可选地在回车符之前 - 带有空格。
\ n或\ 015是换行符。 \ r \ \ 012是回车。 ?在正则表达式中意味着匹配前一个字符的1或0。 $ in regex表示匹配行尾。
原始和最好的正则表达式引用是perldoc perlre,每个编码人员都应该很清楚这个文档: http://perldoc.perl.org/perlre.html 请注意,并非所有语言都支持所有功能。
答案 14 :(得分:1)
这个也删除了标签
$string = preg_replace('~[\r\n\t]+~', '', $text);
答案 15 :(得分:1)
这是我将使用的模式
$string = preg_replace('@[\s]{2,}@',' ',$string);
答案 16 :(得分:0)
这下面的代码工作所有文本请使用它:
$des = str_replace('\n',' ',$des);
$des = str_replace('\r',' ',$des);
答案 17 :(得分:0)
这些解决方案中的许多对我不起作用。 但这可以解决问题:-
$svgxml = preg_replace("/(*BSR_ANYCRLF)\R/",'',$svgxml);
这里是参考:- PCRE and New Lines
答案 18 :(得分:0)
您可以删除新行和多个空格。
$pattern = '~[\r\n\s?]+~';
$name="test1 /
test1";
$name = preg_replace( $pattern, "$1 $2",$name);
echo $name;
答案 19 :(得分:0)
使用上述解决方案的组合,这一行对我有用
$string = trim(str_replace('\n', '', (str_replace('\r', '', $string))));
它删除了 '\r' 和 '\n'。