大家好,我目前对preg_replace
:
preg_replace('#[^a-zA-z\s]#', '', $string)
它保留所有字母和空格,但我希望将多个空格减少到只有一个。知道如何做到这一点?
答案 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)