cre*_*ivz 196 php regex string whitespace preg-replace
我$row['message']从MySQL数据库获取,我需要删除所有的空白\n \t,等等.
$row['message'] = "This is a Text \n and so on \t Text text.";
Run Code Online (Sandbox Code Playgroud)
应格式化为:
$row['message'] = 'This is a Text and so on Text text.';
Run Code Online (Sandbox Code Playgroud)
我试过了:
$ro = preg_replace('/\s\s+/', ' ',$row['message']);
echo $ro;
Run Code Online (Sandbox Code Playgroud)
但它不会删除\n或\t只是单个空格.谁能告诉我怎么做?
cod*_*ict 376
你需要:
$ro = preg_replace('/\s+/', ' ',$row['message']);
Run Code Online (Sandbox Code Playgroud)
您使用的\s\s+是空格(空格,制表符或换行符),后跟一个或多个空格.这实际上意味着用一个空格替换两个或更多个空格.
你想要的是用一个空格替换一个或多个空格,所以你可以使用模式 \s\s*或\s+(推荐)
Cez*_*Cez 65
<?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";
?>
Run Code Online (Sandbox Code Playgroud)
这输出
This is a string with
spaces, tabs and newlines present
---
This is a string with spaces, tabs and newlines present
Run Code Online (Sandbox Code Playgroud)
Ano*_*ous 14
preg_replace('/[\s]+/mu', ' ', $var);
Run Code Online (Sandbox Code Playgroud)
\s 已包含制表符和新行,因此上面的正则表达式似乎已足够.
Luk*_*kas 11
简化为一个功能:
function removeWhiteSpace($text)
{
$text = preg_replace('/[\t\n\r\0\x0B]/', '', $text);
$text = preg_replace('/([\s])\1+/', ' ', $text);
$text = trim($text);
return $text;
}
Run Code Online (Sandbox Code Playgroud)
根据Danuel O'Neal的回答.
$str='This is a Text \n and so on Text text.';
print preg_replace("/[[:blank:]]+/"," ",$str);
Run Code Online (Sandbox Code Playgroud)
我不能在这里复制问题:
$x = "this \n \t\t \n works.";
var_dump(preg_replace('/\s\s+/', ' ', $x));
// string(11) "this works."
Run Code Online (Sandbox Code Playgroud)
我不确定它是否只是一个转录错误,但在你的例子中,你使用的是单引号字符串.如果您有双引号字符串\n,\t则仅被视为换行符和制表符.那是:
'\n\t' != "\n\t"
Run Code Online (Sandbox Code Playgroud)
编辑:正如Codaddict指出的那样,\s\s+不会替换单个制表符.我仍然不认为使用\s+是一种有效的解决方案,所以相反如何:
preg_replace('/(?:\s\s+|\n|\t)/', ' ', $x);
Run Code Online (Sandbox Code Playgroud)
preg_replace('/(\s\s+|\t|\n)/', ' ', $row['message']);
Run Code Online (Sandbox Code Playgroud)
这将用一个空格替换所有制表符、所有换行符以及多个空格、制表符和换行符的所有组合。
<?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);
Run Code Online (Sandbox Code Playgroud)