ChatGPT解决这个技术问题 Extra ChatGPT

php用一个空格替换多个空格[重复]

这个问题在这里已经有了答案:How can I convert ereg expressions to preg in PHP? (4 个回答) 3 年前关闭。

我正在尝试用一个空格替换多个空格。当我使用 ereg_replace 时,我收到关于它已被弃用的错误消息。

ereg_replace("[ \t\n\r]+", " ", $string);

是否有相同的替代品。我需要用一个空格替换多个 " " 个空格和多个 nbsp 个空格。


c
cletus

使用 preg_replace() 而不是 [ \t\n\r] 使用 \s

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

Regular Expression Basic Syntax Reference

\d、\w 和 \s 匹配数字、单词字符(字母、数字和下划线)和空格(空格、制表符和换行符)的简写字符类。可以在字符类内部和外部使用。


@Cletus:这个会用空格替换一个空格。你不觉得这样的事情: preg_replace('/(?:\s\s+|\n|\t)/', ' ', $x) 会更有效,尤其是在具有多个单个空格的文本上?
@codaddict:碰巧,刚才我在现实生活中对那些数据进行了基准测试,结果(用于调用约 8300 篇不同的文本文章):/(?:\s\s+|\n|\t)/ => 1410(最慢),/\s+/ => 611(好的),/\s\s+/ => 496(最快)。最后一个不替换单个 \n\t,但对我来说没问题。
/\s{2,}/u' - 如果您有一些 UTF-8 问题,请添加 /u 开关
对于 unicode,有 mb_ereg_replace doc
@cletus,干得好!,保持这个正则表达式模式,有没有办法摆脱字符串右侧和左侧的所有空格?例如,“abc”,将是“ab c”,我知道我们可以使用 trim($output),但是在正则表达式中使用它会很好
H
HoldOffHunger
$output = preg_replace('/\s+/', ' ',$input);

\s[ \t\n\r] 的简写。多个空格将替换为单个空格。


g
ghostdog74
preg_replace("/[[:blank:]]+/"," ",$input)

不替换 "\n" (PHP 5.3),"/\s+/" 完成工作。 ;)
实际上这有帮助,\s 弄乱了我的多字节字,用某种正方形替换 Š。
@MārtiņšBriedis 有单独的多字节函数:php.net/manual/en/function.mb-ereg-replace.php
与其他答案不同,此命令仅替换空格(而不是换行符等),这正是需要的!太感谢了!