删除多个空格
我正在从MySQL数据库中获得$row['message']
,我需要删除所有像\n
\t
这样的空格,等等。
$row['message'] = "This is a Text \n and so on \t Text text.";
应格式化为:
$row['message'] = 'This is a Text and so on Text text.';
我试过了:
$ro = preg_replace('/\s\s+/', ' ',$row['message']); echo $ro;
但它不会删除\n
或\t
,只是单个空格。 谁能告诉我该怎么做?
你需要:
$ro = preg_replace('/\s+/', ' ',$row['message']);
您正在使用\s\s+
,它表示空格(空格,制表符或换行符),后面跟着一个或多个空格。 这意味着用一个空格replace两个或多个空格。
你想要的是用一个空格replace一个或多个空格,所以你可以使用模式\s\s*
或\s+
(推荐)
<?php $str = "This is a string with spaces, tabs and newlines present"; $stripped = preg_replace(array('/\s{2,}/', '/[\t\n]/'), ' ', $str); echo $str; echo "\n---\n"; echo "$stripped"; ?>
这输出
This is a string with spaces, tabs and newlines present --- This is a string with spaces, tabs and newlines present
我不能在这里复制这个问题:
$x = "this \n \t\t \n works."; var_dump(preg_replace('/\s\s+/', ' ', $x)); // string(11) "this works."
我不确定这是否只是一个转录错误,但在你的例子中,你正在使用一个单引号的string。 \n
和\t
只被视为新行和标签,如果你有一个双引号的string。 那是:
'\n\t' != "\n\t"
编辑 :正如Codaddict指出的那样, \s\s+
不会replace单个制表符。 我仍然不认为使用\s+
是一个有效的解决scheme,所以如何改为:
preg_replace('/(?:\s\s+|\n|\t)/', ' ', $x);
preg_replace('/[\s]+/mu', ' ', $var);
\s
已经包含标签和新行,所以这上面的正则expression式似乎是足够的。
简化为一个function:
function removeWhiteSpace($text) { $text = preg_replace('/[\t\n\r\0\x0B]/', '', $text); $text = preg_replace('/([\s])\1+/', ' ', $text); $text = trim($text); return $text; }
根据丹尼尔·奥尼尔的回答。
$str='This is a Text \n and so on Text text.'; print preg_replace("/[[:blank:]]+/"," ",$str);
没有preg_replace()
$str = "This is a Text \n and so on \t Text text."; $str = str_replace(["\r", "\n", "\t"], " ", $str); while (strpos($str, " ") !== false) { $str = str_replace(" ", " ", $str); } echo $str;
preg_replace('/(\s\s+|\t|\n)/', ' ', $row['message']);
这将用一个空格replace所有制表符,所有换行符以及多个空格,制表符和换行符的所有组合。
<?php #This should help some newbies # REGEX NOTES FROM DANUEL # I wrote these functions for my own php framework # Feel Free to make it better # If it gets more complicated than this. You need to do more software engineering/logic. # (.) // capture any character # \1 // if it is followed by itself # + // one or more class whitespace{ static function remove_doublewhitespace($s = null){ return $ret = preg_replace('/([\s])\1+/', ' ', $s); } static function remove_whitespace($s = null){ return $ret = preg_replace('/[\s]+/', '', $s ); } static function remove_whitespace_feed( $s = null){ return $ret = preg_replace('/[\t\n\r\0\x0B]/', '', $s); } static function smart_clean($s = null){ return $ret = trim( self::remove_doublewhitespace( self::remove_whitespace_feed($s) ) ); } } $string = " Hey yo, what's \t\n\tthe sc\r\nen\n\tario! \n"; echo whitespace::smart_clean($string);
这是我会用的:
一个。 确保使用双引号,例如:
$row['message'] = "This is a Text \n and so on \t Text text.";
湾 要删除多余的空格,请使用:
$ro = preg_replace('/\s+/', ' ', $row['message']); echo $ro;
它可能不是最快的解决scheme,但我认为这将需要最less的代码,它应该工作。 我从来没有使用过MySQL,所以我可能是错的。
我使用这个代码和模式:
preg_replace('/\\s+/', ' ',$data) $data = 'This is a Text and so on Text text on multiple lines and with whitespaces'; $data= preg_replace('/\\s+/', ' ',$data); echo $data;
所有你需要的是如下运行它:
echo preg_replace('/\s{2,}/', ' ', "This is a Text \n and so on \t Text text."); // This is a Text and so on Text text.
事实上,如果你想要这样的东西:
preg_replace('/\n+|\t+|\s+/',' ',$string);
这将用一个选项卡replace多个选项卡
preg_replace("/\s{2,}/", "\t", $string);
没有preg_replace,在循环的帮助下。
<?php $str = "This is a Text \n and so on \t Text text."; $str_length = strlen($str); $str_arr = str_split($str); for ($i = 0; $i < $str_length; $i++) { if (isset($str_arr[$i + 1]) && $str_arr[$i] == ' ' && $str_arr[$i] == $str_arr[$i + 1]) { unset($str_arr[$i]); } else { continue; } } echo implode("", $str_arr) ; ?>