定位多余的空格,但保留新行

时间:2018-10-17 15:11:43

标签: php regex string

我正在尝试在数据库迁移期间清理一些字符串,并删除多余的空格。

    An example of a string would be like this
          and for some reason has empty spaces
                in the beginning of new lines.

有时新行的开头只有1个空白空间。

我需要保留单词和换行符之间的空间。

我尝试了以下操作:

$ string = str_replace('','',$ string); (仅替换一些,还不够)

$ string = preg_replace('/ \ s + /','',$ string); (删除换行符)

我想到的最接近的东西就是这种怪诞:

        $string = str_replace('    ', ' ', $string);
        $string = str_replace('   ', ' ', $string);
        $string = str_replace('  ', ' ', $string);
        $string = str_replace('  ', ' ', $string);
        $string = str_replace(' ', ' ', $string);
        $string = str_replace(' ', ' ', $string);
        $string = str_replace('\r ', '\r', $string);
        $string = str_replace('\n ', '\n', $string);

它删除了大多数空白,保留了新行,但是仍然设法在新行的开头保持1个烦人的多余空间。

正确执行此操作的最佳方法是什么?

3 个答案:

答案 0 :(得分:1)

您可以使用此

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

那应该用一个替换所有多个空格,制表符和换行符。

答案 1 :(得分:0)

您可以使用此:

$string = preg_replace('/[ ]+/', ' ', $string);

它应该用单个空格替换多个空格(而不是其他空格,例如换行符)。

修改

如果您需要从行首删除空格,则可以使用以下模式再次运行preg_replace

  $string = preg_replace('/^[ ]+/m', '', $string);

它将在行的开头搜索一个或多个空格,并替换为空字符串。

答案 2 :(得分:0)

您可以使用交替方式从行1+水平空白字符的开头开始匹配,或者在单词之间保留1个水平空白字符并匹配后面的匹配字符。

然后用空字符串替换。

^\h+|\h\K\h+

说明

  • ^\h+声明字符串的开头,并与水平空白字符匹配一次或多次
  • |
  • \h\K\h+匹配水平空白字符,忘记匹配的内容,然后匹配一次或多次水平空白字符

Regex demo | Php demo

如果只想从字符串开头进行匹配,则可以使用^\h+