$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 ";
preg_replace
。它的速度几乎是 str_replace
的两倍。
s($str)->normalizeLineEndings('')
很有帮助。它不仅会删除 LF、CR 和 CRLF,还会删除任何 Unicode 换行符。
您必须小心双换行符,这会导致双空格。使用这个非常有效的正则表达式:
$string = trim(preg_replace('/\s\s+/', ' ', $string));
多个空格和换行符被一个空格替换。
编辑:正如其他人指出的那样,此解决方案在单词之间匹配单个换行符时存在问题。这在示例中没有出现,但可以很容易地看到这种情况是如何发生的。另一种方法是执行以下操作:
$string = trim(preg_replace('/\s+/', ' ', $string));
对已接受答案的一些评论:
+
表示“1 个或多个”。我认为您无需重复\s
。我认为你可以简单地写 '/\s+/'
。
此外,如果要删除字符串中的第一个和最后一个空格,请添加 trim
。
通过这些修改,代码将是:
$string = preg_replace('/\s+/', ' ', trim($string));
/\s\s+/
将无法匹配 foo\nbar
中的换行符。
只需使用 preg_replace()
$string = preg_replace('~[\r\n]+~', '', $string);
您可以在这个上使用 str_replace()
,尽管代码看起来不那么干净:
$string = str_replace(array("\n", "\r"), '', $string);
在 ideone 现场观看
$string = preg_replace("~[\r\n]~", "",$string);
$string = str_replace(array("\n", "\r"), ' ', $string);
\r
字符
您应该使用 str_replace 来提高速度,并在数组中使用双引号
str_replace(array("\r\n","\r"),"",$string);
\n
而不是 \r\n
而且我认为 OP 要求用一个空格代替换行符
"\n", "\n\r"
添加到数组中。
我不确定这对已经提交的答案是否有任何价值,但我也可以发布它。
// 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
匹配通用换行符
也就是说,任何被 Unicode 视为换行序列的东西。这包括与 \v(垂直空格)匹配的所有字符,以及多字符序列 \x0D\x0A...
$string = preg_replace('/\R+/', " ", $string);
在 8 位非 UTF-8 模式下,\R 等价于以下内容: (?>\r\n|\n|\x0b|\f|\r|\x85)... pcre.org
文本中的换行符通常表示为:
\r\n - 在 Windows 计算机上
\r - 在苹果电脑上
\n - 在 Linux 上
//Removes all 3 types of line breaks
$string = str_replace("\r", "", $string);
$string = str_replace("\n", "", $string);
可以使用 preg_replace 完成 PCRE 正则表达式替换:http://php.net/manual/en/function.preg-replace.php
$new_string = preg_replace("/\r\n|\r|\n/", ' ', $old_string);
将用空格替换新行或返回字符。如果您不想替换它们,请将第二个参数更改为 ''
。
preg
函数使用 PCRE,而不是 POSIX,正则表达式。有 ereg
个函数使用 POSIX,但现在已弃用。
用这个:
用空字符串替换一系列换行符:
$string = preg_replace("/[\\n\\r]+/", "", $string);
或者您可能想用一个空格替换换行符:
$string = preg_replace("/[\\n\\r]+/", " ", $string);
\\n
看起来很糟糕。 \\\\
匹配单个反斜杠真是太糟糕了。
关于:
$string = trim( str_replace( PHP_EOL, ' ', $string ) );
这应该是一个非常强大的解决方案,因为如果我没记错的话,\n 不能在所有系统中正常工作......
看到大家对正则表达式知之甚少,我感到很惊讶。
在 php 中去除换行符是
$str = preg_replace('/\r?\n$/', ' ', $str);
在 perl 中
$str =~ s/\r?\n$/ /g;
意思是用空格替换行尾的任何换行符(为了提高效率) - 可选地以回车符开头。
\n 或 \015 是换行符。 \r 或 \012 是回车。 ?在正则表达式中表示匹配前一个字符的 1 或 0。正则表达式中的 $ 表示匹配行尾。
原始和最佳的正则表达式参考是 perldoc perlre,每个编码人员都应该非常了解此文档:http://perldoc.perl.org/perlre.html 请注意,并非所有语言都支持所有功能。
其中许多解决方案对我不起作用。但这确实成功了:-
$svgxml = preg_replace("/(*BSR_ANYCRLF)\R/",'',$svgxml);
这是参考:- PCRE and New Lines
这是我会使用的模式
$string = preg_replace('@[\s]{2,}@',' ',$string);
这个也删除了标签
$string = preg_replace('~[\r\n\t]+~', '', $text);
您可以尝试下面的代码将保留文本中的任何空格和新行。
$str = "
put returns between paragraphs
for linebreak add 2 spaces at end
";
echo preg_replace( "/\r|\n/", "", $str );
也许这有效:
$str='\n';
echo str_replace('\n','',$str);
您可以删除新行和多个空格。
$pattern = '~[\r\n\s?]+~';
$name="test1 /
test1";
$name = preg_replace( $pattern, "$1 $2",$name);
echo $name;
很简单
$hello = "
A
B
C
";
str_replace("
", " ", $hello);
// A B C
以下代码适用于所有文本,请使用它:
$des = str_replace('\n',' ',$des);
$des = str_replace('\r',' ',$des);
使用上述解决方案的组合,这一行对我有用
$string = trim(str_replace('\n', '', (str_replace('\r', '', $string))));
它删除了“\r”和“\n”。
/(?![ ])\s+/