【问题标题】:How to remove more than one whitespace如何删除多个空格
【发布时间】:2014-02-18 09:10:07
【问题描述】:

大家好,我的preg_replace 目前有问题:

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

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

【问题讨论】:

标签: php regex preg-replace


【解决方案1】:
$output = preg_replace('!\s+!', ' ', $input);

From Regular Expression Basic Syntax Reference

\d、\w 和 \s

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

【讨论】:

    【解决方案2】:

    字符类型\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);
    

    【讨论】:

      【解决方案3】:
      preg_replace(array('#\s+#', '#[^a-zA-z\s]#'), array(' ', ''), $string);
      

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

      【讨论】:

        【解决方案4】:

        尝试改用trim

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

        输出

          Error
        ------
        Error
        

        【讨论】:

        • "Err or" 呢?
        • 在这种情况下,您将需要正则表达式,因为不是多余的空白,只是错过拼写的单词。
        • 这不是单词被拆分的事实,而是 OP 试图删除字符串中的空格,例如单词之间的两个空格。
        【解决方案5】:

        问题很旧,遗漏了一些细节。假设 OP 想要减少所有连续的水平空白并用空格替换。

        示例:

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

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

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

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2011-01-20
          • 1970-01-01
          • 1970-01-01
          • 2012-01-30
          • 2016-05-08
          • 2019-07-06
          • 1970-01-01
          相关资源
          最近更新 更多