如何在PHP中用正则表达式替换所有实际上不是空格的空格

Posted

技术标签:

【中文标题】如何在PHP中用正则表达式替换所有实际上不是空格的空格【英文标题】:How to replace all spaces which are not actually spaces with regex in PHP 【发布时间】:2017-07-22 19:07:37 【问题描述】:

我有以下字符串,我想从多个空格中“清除”:

$string = "This is   a test string"; //Using utf8_decode

没什么大不了的吧?但是,使用后字符串没有被“清理”:

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

因为,字符串实际上是这样的:

$test = "This is a  test string";

那么,我该如何解决这个问题?

谢谢。

拜托,我不想替换 str_replace('Â', '') 之类的字符

【问题讨论】:

试试preg_replace('/\s+/u', ' ', $string) Lol 英雄的速度很快吧?谢谢 @WiktorStribiżew 我不是一个 unicode 人,所以对于我的信息, 是一个空白字符吗? @AbraCadaver: 不是空白字符,是一些Unicode空白字符转换成不同编码后变成的字符。 @WiktorStribiżew:非常感谢! 【参考方案1】:

您可以使用/uUNICODE 修饰符:

$string = preg_replace('/\s+/u', ' ', $string);

/u modifier 使 PCRE 引擎能够将字符串处理为 UTF8 字符串(通过打开 PCRE_UTF8 动词)并使模式中的速记字符类能够识别 Unicode(通过启用 PCRE_UCP 动词)

重点是\s 现在将匹配所有 Unicode 空格,并且输入字符串被视为 Unicode 字符串。

【讨论】:

非常感谢!我试图解决这个问题好几个小时。

以上是关于如何在PHP中用正则表达式替换所有实际上不是空格的空格的主要内容,如果未能解决你的问题,请参考以下文章

如何在 C# 中用单个空格替换多个空格?

PHP正则表达式替换以@结尾以2个空格结尾的单词[关闭]

如何在 PHP 中的变量中用空格替换制表符?

php正则表达怎么把一个字符串中的所有空格都转化为下划线

正则表达式匹配超过 2 个空格但不匹配新行

使用 PHP 将 URLS 中的空格替换为 %20