【发布时间】:2014-02-18 09:10:07
【问题描述】:
大家好,我的preg_replace 目前有问题:
preg_replace('#[^a-zA-z\s]#', '', $string)
它保留所有字母和空格,但我希望将多个空格减少到只有一个。知道如何做到这一点吗?
【问题讨论】:
标签: php regex preg-replace
大家好,我的preg_replace 目前有问题:
preg_replace('#[^a-zA-z\s]#', '', $string)
它保留所有字母和空格,但我希望将多个空格减少到只有一个。知道如何做到这一点吗?
【问题讨论】:
标签: php regex preg-replace
$output = preg_replace('!\s+!', ' ', $input);
From Regular Expression Basic Syntax Reference
\d、\w 和 \s
与数字、单词字符(字母、数字和下划线)和空格(空格、制表符和换行符)匹配的简写字符类。可以在字符类内部和外部使用。
【讨论】:
字符类型\s 代表五个不同的字符:horizontal tab (9)、line feed (10)、form feed (12)、carriage return (13) 和 ordinary space (32)。下面的代码将找到完全由\s 组成的$string 的每个子字符串。仅保留子字符串中的第一个 \s。例如,如果换行符、水平制表符和普通空格在子字符串中紧随其后,则替换完成后将仅保留换行符。
$string = preg_replace('#(\s)\s+#', '\1', $string);
【讨论】:
preg_replace(array('#\s+#', '#[^a-zA-z\s]#'), array(' ', ''), $string);
虽然它会用空格替换所有空格。如果你想替换后续的空格(比如两个换行符只有一个换行符) - 你应该弄清楚逻辑,因为 \s+ 将匹配 "\n \n \n" (连续 5 个空格)。
【讨论】:
尝试改用trim
<?php
$something = " Error";
echo $something."\n";
echo "------"."\n";
echo trim($something);
?>
输出
Error
------
Error
【讨论】:
"Err or" 呢?
问题很旧,遗漏了一些细节。假设 OP 想要减少所有连续的水平空白并用空格替换。
示例:
"\t\t \t \t" => " "
"\t\t \t\t" => "\t \t"
一种可能的解决方案是简单地使用代表水平空白空间的generic character type \h:
preg_replace('/\h+/', ' ', $text)
【讨论】: