我正在尝试在数据库迁移期间清理一些字符串,并删除多余的空格。
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个烦人的多余空间。
正确执行此操作的最佳方法是什么?
答案 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+
匹配水平空白字符,忘记匹配的内容,然后匹配一次或多次水平空白字符如果只想从字符串开头进行匹配,则可以使用^\h+