Php 将所有换行符替换为两个空格,然后将其还原
我试图用两个空格临时替换所有换行符,并在字符串上执行某些函数后将其从两个空格恢复为换行符 但它不起作用。它不会恢复换行符 我就是这么做的:Php 将所有换行符替换为两个空格,然后将其还原,php,regex,preg-replace,str-replace,Php,Regex,Preg Replace,Str Replace,我试图用两个空格临时替换所有换行符,并在字符串上执行某些函数后将其从两个空格恢复为换行符 但它不起作用。它不会恢复换行符 我就是这么做的: 首先用一个空格替换所有重复的空格 $text = preg_replace( '/\s+/', ' ',$text ); 将换行符替换为两个空格 $text = str_replace( array( '\r', '\r\n', '\n'), ' ', $text ); 运行一些函数 恢复换行符 $text = str_replace( ' ',
$text = preg_replace( '/\s+/', ' ',$text );
$text = str_replace( array( '\r', '\r\n', '\n'), ' ', $text );
$text = str_replace( ' ', '\n', $text );
\s\s
不会改变任何事情
测试了一些东西:
str_replace
(步骤2)只有在我使用preg_replace
替换重复的空白(步骤1)后,才能检测到换行符
没有步骤1,它就可以工作 '\n'
为文字\n
字符串,而不是换行符。作业需要使用双引号(“
):
$text = str_replace( array( "\r", "\r\n", "\n"), ' ', $text );
在正则表达式中
\s
表示空白(\n\r\t\f和“”)
。这就是它更改换行符的原因。字符类[]
中的空格仅用于空格
$text = preg_replace( '/[ ]+/', ' ',$text );
要将换行符更改为双空格,请使用使用双引号的换行符
$text = str_replace( array( "\r", "\r\n", "\n"), ' ', $text );
或者,您也可以使用preg\u replace
$text = preg_replace( '/[\n\r]/', ' ',$text );
我建议使用这些:
$text=preg_replace('/+/','$text);
这将只替换空格。\s
将匹配的不仅仅是空格,因为它还匹配垂直空格,如换行符、回车符……因此,您的第二次替换没有任何新行要替换
$text=str\u replace(数组(“\r”、“\r\n”、“\n”)、“$text”);
正如hkpotter92已经指出的,您需要使用双引号,否则,您将尝试匹配文字字符,而不是可携带的返回和换行符
$text=str\u replace(“”,“\n”,$text);
同样,您必须在这里使用双引号,否则,最终将使用文本\n
代替双空格
您在这里做了4件不同的事情,其中一件显然不起作用?哪一件?请从问题中删除另外三件。另外,请发布对您不起作用的
$text
的值。好的。我的错。但问题仍然存在:preg_replace('/\s+/','two whitespaces',$text)将新行替换为一个空格而不是两个空格。您的权利。我是这样实现的:while(strpos($this->\u text,){$this->\u text=str\u replace('',$this->\u text);}
@user2429266也可以,如果你不介意使用循环:)但是还有另一个问题。这个:$text=str\u replace(数组(“\r”,“\r\n”,“\n”),”,“,”,”,“,$text);
将每一个换行符替换两次。而不仅仅是一次。$This->\u text=strtext LINEBREAK text LINEBREAK“to:“text text text”@user2429266如果我能很好地理解这个问题,那是因为顺序的关系。试着使用这个数组:数组(“\r\n”、“\r”、“\n”)
,这样,它会在\r
和单个替换中断之前查找\n
。