如何删除多个空格

时间:2014-01-27 13:40:42

标签: php regex preg-replace

大家好,我目前对preg_replace

有疑问
preg_replace('#[^a-zA-z\s]#', '', $string)

它保留所有字母和空格,但我希望将多个空格减少到只有一个。知道如何做到这一点?

5 个答案:

答案 0 :(得分:2)

$output = preg_replace('!\s+!', ' ', $input);

From Regular Expression Basic Syntax Reference

\ d,\ w和\ s

匹配数字,单词字符(字母,数字和下划线)和空格(空格,制表符和换行符)的速记字符类。可以在字符类的内部和外部使用。

答案 1 :(得分:1)

字符类型\s代表五个不同的字符:horizontal tab(9),line feed(10),form feed(12),carriage return( 13)和ordinary space(32)。以下代码将查找$string的每个子字符串,它完全由\s组成。只保留子字符串中的第一个\s。例如,如果换行,水平制表符和普通空格在子字符串中紧接着出现,则在替换完成后,单独换行将保留。

$string = preg_replace('#(\s)\s+#', '\1', $string);

答案 2 :(得分:0)

preg_replace(array('#\s+#', '#[^a-zA-z\s]#'), array(' ', ''), $string);

虽然它会用空格替换所有空格。如果你想要替换后续的空格(比如只有一个换行符的两个换行符) - 你应该弄清楚它的逻辑,coz \ s +将匹配“\ n \ n \ n”(连续5个空格)。

答案 3 :(得分:0)

尝试使用trim代替

<?php
$something = "   Error";
echo $something."\n";
echo "------"."\n";
echo trim($something);
?>

输出

  Error
------
Error

答案 4 :(得分:0)

问题很老,遗漏了一些细节。让我们假设 OP 想要减少所有连续的水平空格并替换为一个空格。

示例:

"\t\t \t  \t" => " "
"\t\t   \t\t" => "\t \t"

一种可能的解决方案是简单地使用代表水平空白的 generic character type \h

preg_replace('/\h+/', ' ', $text)